按位或操作符( & )
参与运算的两个运算量,按二进制位进行操作运算,对应位同时为1时,则该位结果为1,否则为0
0 & 0 = 0
0 & 1 = 0
1 & 0 = 0
1 & 1 = 1
35 & 45 = 33
0000 0000 0000 0000 0000 0000 0010 0011 //35
0000 0000 0000 0000 0000 0000 0010 1101 //45
------------------------------------------
0000 0000 0000 0000 0000 0000 0010 0001 //33
按位与运算符( | )
参与运算的两个运算量,按二进制位进行操作运算,对应位中其一值为1时,则该位结果为1,否则为0
0 | 0 = 0
0 | 1 = 1
1 | 0 = 1
1 | 1 = 1
35 | 45 = 47
0000 0000 0000 0000 0000 0000 0010 0011 //35
0000 0000 0000 0000 0000 0000 0010 1101 //45
------------------------------------------
0000 0000 0000 0000 0000 0000 0010 1111 //47
按位异或操作符( ^ )
参与运算的两个运算量,按二进制位进行操作运算,对应位相同时,则该位结果为0,否则为1
0 ^ 0 = 0
0 ^ 1 = 1
1 ^ 0 = 1
1 ^ 1 = 0
35 ^ 45 = 14
0000 0000 0000 0000 0000 0000 0010 0011 //35
0000 0000 0000 0000 0000 0000 0010 1101 //45
------------------------------------------
0000 0000 0000 0000 0000 0000 0000 1110 //14
按位取反操作符( ~ )
单目运算符,按二进制位进行取反操作运算
~96 = -97
0000 0000 0000 0000 0000 0000 0110 0000 //96
------------------------------------------
1111 1111 1111 1111 1111 1111 1001 1111 //-97
左移运算符( << )
将一个运算量的二进制位左移若干位,右侧补0
注意,左移不会影响操作数的符号位
15 << 2 = 60
0000 0000 0000 0000 0000 0000 0000 1111 //15
------------------------------------------
0000 0000 0000 0000 0000 0000 0011 1100 //60
右移运算符( >> )
将一个运算量的二进制位右移若干位,左侧补0,超出的值侧丢弃
这个操作符会将数值向右移动,但会保留符号位
38 >> 2 = 9
0000 0000 0000 0000 0000 0000 0010 0110 //38
------------------------------------------
0000 0000 0000 0000 0000 0000 0000 1001 //9
无符号右移运算符( >>> )
对无符号运算量进行运算时,计算结果与右移运算符的相同,而对于负值进行计算时结果会非常之大。
- 无符号时,和右移运算符的运算结果相同
55 >> 3 = 6
55 >>> 3 = 6
0000 0000 0000 0000 0000 0000 0011 0111 //55
------------------------------------------
0000 0000 0000 0000 0000 0000 0000 0110 // 6
- 负值时
-55 >> 3 = -7
1111 1111 1111 1111 1111 1111 1100 1001 //-55
------------------------------------------
1111 1111 1111 1111 1111 1111 1111 1001 // -7
-55 >>> 3 = 536870905
1111 1111 1111 1111 1111 1111 1100 1001 //-55
------------------------------------------
0001 1111 1111 1111 1111 1111 1111 1001 // 536870905
没有评论