位运算符
前面我们提过,所有的整数类型,除了char外,都是有符号的。JAVA使用补码表示二进制数,在补码表示中,最高位为符号位,正数的符号位为0,负数的符号位为1。
序号 |
运算符 |
含义 |
1 |
<< |
左移(移位运算符) |
2 |
>> |
右移(移位运算符) |
3 |
>>> |
无符号右移(移位运算符) |
4 |
~ |
非(取反)(位逻辑运算符) |
5 |
^ |
异或(位逻辑运算符) |
6 |
& |
与(位逻辑运算符) |
7 |
| |
或(位逻辑运算符) |
注:位运算符只存在于整数之间,前面说过byte、short、char 在运算时都会转为int类型,所以这3种类型也可以参与位运算。浮点数不能进行位运算。 |
上表中7种位运算符中,前3种是移位运算符,后4种是位逻辑运算符。
3个移位运算符
移位运算符有3个:<<、>>、>>>
<<左移运算符
例:-2 << 2
解:-2以二进制数表示为:11111111 11111111 11111111 11111110 整形为32位。
左移运算符表示,将这个二进制数往左边移2位,即在末尾补2个0。
结果得到二进制数:11111111 11111111 11111111 11111000
除去符号位转成10进制数,得8,其符号位为1,即为负数,结果为-8
>>右移运算符
例:5 >> 2
解:5以二进制表示为:00000000 00000000 00000000 00000101
右移运算符表示,讲这个二进制数往右移动2位,即在前面补2个0,后面多余的部分移除。
结果得到二进制数:00000000 00000000 00000000 00000001
出去符号位转成10进制数,得1,其符号位为0,即为正数,结果为1
>>>无符号右移
无符号右移动,即忽略符号位,将二进制数转成十进制数时也将符号位的1或0计算在内
例1:-2 >>> 5
解: -2以二进制数表示为:11111111 11111111 11111111 11111110
将这个二进制数往右移5位,即得:00000111 11111111 11111111 11111111
忽略符号位,再转为十进制数得到结果:134217727。
例2:5 >>> 2
解: 5以二进制数表示为:00000000 00000000 00000000 00000101
将这个二进制数往右移3位,即得:00000000 00000000 00000000 00000001
忽略符号位,再转为十进制得到结果:1
4个位逻辑运算符号
位逻辑运算符有4个:^ 、 ~ 、 & 、 |
^异或运算符
异或运算先查看两个数的二进制表示值,并执行按位异或。按位异或的计算方法为,当且仅当只有一个数的二进制数的某位为1时,结果的该位才为1,否则结果的该位为0。
例1: 5 ^ 3
解:5的二进制表示: 00000000 00000000 00000000 00000 101 (前面为符号位)
3的二进制表示: 00000000 00000000 00000000 000000 11
结果为 : 00000000 00000000 00000000 00000 110
结果转成10进制数为:6
例2: -5 ^ 2
解:-5的二进制表示:11111111 11111111 11111111 11111 101
2的二进制表示:00000000 00000000 00000000 00000 010
结果为: 11111111 11111111 11111111 11111 111
结果转成十进制数为:-7
~取反运算符
取反运算符,顾名思义,取反运算符就是把某个二进制表示数中的1变成0,0变成1。
例: ~4
解: 4的二进制数表示为: 00000000 00000000 00000000 00000 100 (前面为符号位)
取反为: 11111111 11111111 11111111 11111 011
转成十进制数为:-5
&逻辑与运算符
逻辑与运算最直观的运算规律为:遇 0 得 0。
即两个二进制数进行逻辑与运算时,在相同位数上只要有0,则结果的相同位上得0。
例1:3 & 5
解:3 的二进制表示为:00000000 00000000 00000000 00000011
5 的二进制表示为:00000000 00000000 00000000 00000101
逻辑与运算结果为:00000000 00000000 00000000 00000001
转成十进制数结果为: 1
例2: -3 & 5
解:-3的二进制表示为:11111111 11111111 11111111 111111 11
5的二进制表示为:00000000 00000000 00000000 00000 101
逻辑与运算结果为:00000000 00000000 00000000 00000 101
转成十进制数结果为: 5
| 逻辑或运算符
逻辑或运算最直观的运算规律为:遇1得1
即两个二进制数进行逻辑或运算时,在相同位数上只要有1,则结果的相同位上得1
例1: 4 | 3
解: 4的二进制表示为: 00000000 00000000 00000000 00000100
3的二进制表示为: 00000000 00000000 00000000 00000011
逻辑或运算结果为: 00000000 00000000 00000000 00000111
转成十进制数结果为: 7
例2: -2 | 4
解: -5 的二进制表示为: 11111111 11111111 11111111 11111110
4的二进制表示为: 00000000 00000000 00000000 00000100
逻辑或运算结果为: 11111111 11111111 11111111 11111110
转成十进制数结果为: -2