01 位移运算
-
左移 扩大
-
1>>4
即1 * 2 * 2 * 2 * 2 = 16 左移 4 位即pow(2,4) -
Java提供的位运算符有:左移(
<<
)、右移(>>
) 、无符号右移(>>>
) 、位与(&
) 、位或(|
)、位非(~
)、位异或(^
),除了位非(~
)是一元操作符外,其它的都是二元操作符。1. 左移( << )
a << b 表示将数值 a 的二进制数值从 0 位算起到第 b - 1 位,整体向左方向移动 b 位,符号位不变,低位空出来的位补数值 0。
a << b = a * (2 ^ b)
2. 右移( >> )
a >> b 表示将数值 a 的二进制数值从 0 位算起到第 b - 1 位,整体向右方向移动 b 位,符号位不变,高位空出来的位补数值 0。
a >> b = a / ( 2 ^ b )
3. 无符号右移( >>> )
无符号右移运算符>>>和右移运算符>>是一样的,只不过右移时左边是补上符号位,而无符号右移运算符是补上0,也就是说,对于正数移位来说等同于:>>,负数通过此移位运算符能移位成正数。
4. 位与( & )
与运算时,进行运算的两个数,从最低位到最高位,一一对应。如果某 bit 的两个数值对应的值都是 1,则结果值相应的 bit 就是 1,否则为 0.
0 & 0 = 0, 0 & 1 = 0, 1 & 1 = 1
5. 位或( | )
与运算时,进行运算的两个数,从最低位到最高位,一一对应。如果某 bit 的两个数值对应的值只要 1 个为 1,则结果值相应的 bit 就是 1,否则为 0。
0 | 0 = 0, 0 | 1 = 1, 1 | 1 = 1
6. 位异或( ^ )
两个操作数进行异或时,对于同一位上,如果数值相同则为 0,数值不同则为 1。
1 ^ 0 = 1, 1 ^ 1 = 0, 0 ^ 0 = 0;
7. 位非( ~ )
对操作数的每一位进行操作,1 变成 0,0 变成 1。
-