位运算
文章目录
Java的位运算主要有:按位与(&
)、按位或(|
)、按位取反(~
)、按位异或(^
)、左移(<<
)、带符号右移(>>
)、无符号右移(>>>
)
按位与(&)
当相同位上的两个数字都为1时,结果为1;否则为0
1&1=1
1&0=0
0&1=0
0&0=0
按位或(|)
当相同位上的数字至少有一个为1时,结果为1;否则为0
1|1=1
1|0=1
0|1=1
0|0=0
按位取反(~)
^1=0
^0=1
按位异或(^)
当相同位上的两个数字不同时,结果为1;相同时为0
1^1=0
1^0=1
0^1=1
0^0=0
左移(«)
将二进制数字向左移动,移动几位就在最右侧补多少个0。
例如 3<<1
,因为3的二进制表示形式为11,向左移动一位后变为110,所以 3<<1=6
。
左移n位相当于乘上2的n次方。
带符号右移(»)
将二进制数字向右移动,移动几位就在最右侧消去多少个比特位,并最左侧填充符号位。
例如 3>>1
,因为3的二进制表示形式为011,所以向右移动一位后变为001,所以 3>>1=1
。
例如 -3>>1
,因为-3的二进制补码表示为111111111111111111111111111111011 2,所以带符号向右移动一位后变为11111111111111111111111111111110,对应的数字为-2,所以 -3>>1=-2
。
1左移一位会变成0,0左移依旧为0。
无符号右移(»>)
将二进制数字向右移动,移动几位就在最右侧消去多少个比特位,并最左侧填充0。
例如 -3>>>1
,因为-3的二进制补码表示为11111111111111111111111111111101,所以无符号向右移动一位后变为01111111111111111111111111111110,对应的数字为2147483646,所以 -3>>>1=2147483646
注
文章作者 梧桐碎梦
上次更新 2022-01-24 14:23:34