使用位运算符时首先将要进行运算的数转换为二进制,而后对二进制数值中的每一位进行计算,最后将得出的二进制数转换为相应类型的数值结果优化
与运算规则spa
0 & 0 = 0 0 & 1 = 0 1 & 1 = 1
与门逻辑电路,输入端均为高电平(逻辑1)时,输出才为高电平,不然为低电平(逻辑0)3d
例:code
3 & 5
转换为二进制blog
0000 0011 & 0000 0101
从最低位到最高位一一对应进行运算,得出结果get
0000 0001
所以it
3 & 5 = 1
或运算规则二进制
0 | 0 = 0 0 | 1 = 1 1 | 1 = 1
或门逻辑电路,输入端A或输入端B为高电平(逻辑1)时,输出为高电平(逻辑1)im
例:db
4 | 7
转换为二进制
0000 0100 | 0000 0111
从最低位到最高位一一对应进行运算,得出结果
0000 0111
所以
4 | 7 = 7
异或运算规则,位数值相同则为0,不一样则为1
0 ^ 0 = 0 0 ^ 1 = 1 1 ^ 1 = 0
异或门逻辑电路
例:
5 ^ 9
转换为二进制
0000 0101 ^ 0000 1001
从最低位到最高位一一对应进行运算,得出结果
0000 1100
所以
5 ^ 9 = 12
取反运算规则,对操做数的每一位进行取反操做,0取反为1,1取反为0
~0 = 1 ~1 = 0
例:
~7
转换为二进制
0000 0111 ~
对每一位进行取反运算,得出结果
1111 1000
5. << 左移运算符
运算规则:将操做数的各二进制位左移若干,右补0,左溢出位舍弃
例
15转换为二进制00001111,左移两位
00001111 << 2
结果为
00111100
在数字没有溢出的前提下,对于正数和负数,左移一位都至关于乘以2的1次方,左移n位就至关于乘以2的n次方。由于位运算比x运算快,能够使用位运算对代码进行优化
6. >>> 右移运算符
将二进制位向右移若干,右溢出位舍弃,高位补0
例如 16,二进制为00010000,右移两位
00010000 >>> 2
运算结果为 00000100,即16/(2*2) = 4
7. >> 带符号的右移运算符
对于正数的运算>>与>>>效果是同样的,右移高位补0。可是对于负数,>> 是在高位补1
例16与-16
00010000 >> 2 = 00000100 11101111 >> 2 = 11111011