关于位运算
<< :左移运算符,向左移若干位,高位丢弃,低位补零。x << 1,相当于 x 乘以 2(不溢出的情况下)。
>> :带符号右移,向右移若干位,高位补符号位,低位丢弃。正数高位补 0,负数高位补 1。x >> 1,相当于 x 除以 2。
>>> :无符号右移,忽略符号位,空位都以 0 补齐。
注意点:
1. 注意遇见负数的时候,一般是针对其补码进行运算,得出结果的时候需要先计算出其对应的原码,然后才能得到结果。
补码 -> 原码 转换(原码 -> 补码 一样):
- 如果符号位为0,原码 == 补码。
- 如果符号位为1:
- 符号位以外的位全部取反(反码);
- 加1。
举个例子,-10的原码为: 10000000000000000000000000001010,其反码为11111111111111111111111111110101,其补码为11111111111111111111111111110110。
2. 位移的位置会做模运算,假设是int类型的,则10 >> 33 等同于 10 >> (33 % 32),因为int的比特位数是32。

浙公网安备 33010602011771号