Java 位运算符 &、|、^、~、<<、>>
以前学过有关java的运算符,不过开发了这么久也很少用过这个。现在由于开发需要,所以现在再来回顾整理下有关java的运算符。
主要运算符有以下:与(&)
、或(|)
、异或(^)
、取反(~)
、左移(<<)
、右移(>>)
。
一 与(&) 和 (|)
1、&(按位与)
规则
:将两边的数转换为二进制位,然后运算最终值。运算规则即(两个为真才为真
)1&1=1 , 1&0=0 , 0&1=0 , 0&0=0。
举例
:
4&7 这个运算的结果是多少?
![](https://img2018.cnblogs.com/blog/1090617/201908/1090617-20190812122907208-1232985372.jpg)
3&5 这个运算的结果是多少?
![](https://img2018.cnblogs.com/blog/1090617/201908/1090617-20190812122917179-1433652806.jpg)
2、|(按位或)
规则
将两边的数转换为二进制位,然后运算最终值。不同的是运算规则(一个为真即为真
)1|0 = 1 , 1|1 = 1 , 0|0 = 0 , 0|1 = 1
举例
3|6 这个运算的结果是多少?
![](https://img2018.cnblogs.com/blog/1090617/201908/1090617-20190812122925754-1440854099.jpg)
5|9 这个运算的结果是多少?
![](https://img2018.cnblogs.com/blog/1090617/201908/1090617-20190812122933187-963355095.jpg)
二、异或(^) 和 取反(~)
1、异或(^)
规则
异就是不同,其运算规则为1^0 = 1 , 1^1 = 0 , 0^1 = 1 , 0^0 = 0
举例
3^6 这个运算的结果是多少?
![](https://img2018.cnblogs.com/blog/1090617/201908/1090617-20190812122943194-934707333.jpg)
5^9 这个运算的结果是多少?
![](https://img2018.cnblogs.com/blog/1090617/201908/1090617-20190812122951637-495595879.jpg)
2、取反(~)
规则
取反就是1为0,0为1。
举例
~5 这个运算的结果是多少?
![](https://img2018.cnblogs.com/blog/1090617/201908/1090617-20190812122958799-1134870656.jpg)
这个其实就是,就是把1变0,0变1。
注意
:二进制中,最高位是符号位 1表示负数,0表示正数。
~15 这个运算的结果是多少?
![](https://img2018.cnblogs.com/blog/1090617/201908/1090617-20190812123007482-1299204099.jpg)
三、左移运算(<<) 和 右移运算(>>)
1、左移运算(<<)
规则
左移就是把所有位向左移动几位。
举例
6 << 2 这个运算的结果是多少?
![](https://img2018.cnblogs.com/blog/1090617/201908/1090617-20190812231712309-1244747142.png)
9 << 2 这个运算的结果是多少?
![](https://img2018.cnblogs.com/blog/1090617/201908/1090617-20190812231721377-1378850273.png)
公式
M << n 其实可以这么算 M << n = M * 2^n
2、右移运算(>>)
规则
这个跟左移运算大体是一样的,但是还是有点不同的,不同点在于对于正数和负数补位的时候补的不一样,负数补1,正数补0
举例
12 >> 2 这个运算的结果是多少?
![](https://img2018.cnblogs.com/blog/1090617/201908/1090617-20190812123034655-1764478056.jpg)
-9 >> 2 这个运算的结果是多少?
![](https://img2018.cnblogs.com/blog/1090617/201908/1090617-20190812123045753-617593429.jpg)
从这里就可以看出 正数右移补0,负数右移补1。
四、负数的进制表示
我们来思考下
1、负的十进制的转二进制
对于十机制的负数,如何用二进制来表示:
思路三步曲
: 1、正数二进制 2、反码 3、反码+1
举例
:
-1 如何转换成二进制?
![](https://img2018.cnblogs.com/blog/1090617/201908/1090617-20190812124014930-566588648.png)
说明
-1在计算机里用二进制表达就是全1
2、负的二进制转十进制
上面思路是负的十进制转二进制,那么同样负的二进制转10进制跟上面相反就可以了。
思路三步曲
1、负数的二进制码 2、二进制码-1 3、取反
举例
1111 1101 如何转换成十进制?
![](https://img2018.cnblogs.com/blog/1090617/201908/1090617-20190812123105189-331598625.jpg)
参考
3、Java基础——十进制负数转换为二进制、八进制、十六进制
我相信,无论今后的道路多么坎坷,只要抓住今天,迟早会在奋斗中尝到人生的甘甜。抓住人生中的一分一秒,胜过虚度中的一月一年!(3)