位运算符简介
Java中的位运算符:按位与、按位或、异或、左移、右移、取反、无符号右移等。
规则:先把十进制转二进制,再用二进制进行位运算,再转十进制。
如(计算机中一般是8位制,也可以写成32位制,不足的补0):
11的二进制为: 0000 1011
9的二进制为: 0000 1001
8的二进制为: 0000 1000
5的二进制为: 0000 0101
可理解为,二进制从右到左依次是个位、十位、百位、千位等等。
&(按位与)
运算规则:(两个为真才为真)1&1=1 , 1&0=0 , 0&1=0 , 0&0=0
11 & 9 = 1011 & 1001 = 1001 = 9
8 & 5 = 1000 & 0101 = 0000 = 0
|(按位或)
运算规则:(一个为真即为真)1|1 = 1 , 1|0 = 1 , 0|1 = 1 , 0|0 = 0
11 | 9 = 1011 | 1001 = 1011= 11
8 | 5 = 1000 | 0101 = 1101= 13
^(异或)
运算规则:1^1 = 0,1^0 = 1 , 0^1 = 1 , 0^0 = 0
11 ^ 9 = 1011 ^ 1001 = 0010 = 2
8 ^ 5 = 1000 ^ 0101 = 1101 = 13
<<(左移)
运算规则:二进制位往左挪位,右边补0
11 << 2 = 0000 1011= 0010 1100 = 44
9 << 2 = 0000 1001 = 0010 0100 = 36
8 << 2 = 0000 1000= 0010 0000 = 32
5 << 2 = 0000 0101 = 0001 0100 = 20
>>(右移)
运算规则:二进制位往右挪位,左边补0
11 >> 2 = 0000 1011= 0000 0010 = 2
9 >> 2 = 0000 1001 = 0000 0010 = 2
8 >> 2 = 0000 1000= 0000 0010 = 2
5 >> 2 = 0000 0101 = 0000 0001 = 1
~(取反)
运算规则:用32位制表示,1取反为0,0取反为1,原码加1,再取负数
公式:如常数a,对a进行取反,结果为:-(a+1);
注:所有的取反操作、加1、减1操作,都在有效位进行;
~11
11的原码:00000000 00000000 00000000 00001011
11的反码:11111111 11111111 11111111 11110100
取补码 = 原码+1:00000000 00000000 00000000 00001100 = 12 = -12
结论:~11取反结果为-12
~9
9的原码:00000000 00000000 00000000 00001001
9的反码:11111111 11111111 11111111 11110110
取补码 = 原码+1:00000000 00000000 00000000 00001010 = 10 = -10
结论:~9取反结果为-10
~8
8的原码:00000000 00000000 00000000 00001000
8的反码:11111111 11111111 11111111 11110111
取补码 = 原码+1:00000000 00000000 00000000 00001001 = 9 = -9
结论:~8取反结果为-9
~5
5的原码:00000000 00000000 00000000 00000101
5的反码:11111111 11111111 11111111 11111010
取补码 = 原码+1:00000000 00000000 00000000 00000110 = 6 = -6
结论:~5取反结果为-6
>>>(无符号右移)
运算规则:无符号右移是高位补0,移多少位补多少个0
备注:对于正数和0,>>>无符号右移和>>右移效果是一样的。
负数移位,右边(低位)移出,直接舍弃,左边(高位)全部补0(1变为0,负数变正数)。
11 >>> 2 = 0000 1011 = 0000 0010 = 2
-11 >>> 2 结果为:1073741821
9 >>> 2 = 0000 1001 = 0000 0010 = 2
-9 >>> 2 结果为:1073741821
8 >>> 2 = 0000 1000= 0000 0010 = 2
-8 >>> 2 结果为:1073741822
5 >>> 2 = 0000 0101 = 0000 0001 = 1
-5 >>> 2 结果为:1073741822
识别二维码关注个人微信公众号
本章完结,待续,欢迎转载!
本文说明:该文章属于原创,如需转载,请标明文章转载来源!