位运算
>>>
代表无符号右移,>>
是有符号右移
- 负数的右移:补码左边补1,之后取原码;
- 负数的左移:补码右边补0,之后取原码。
- 补码是反码+1,如果是负数,则第一位为1不变。
- 例子:
-
正数:r = 20 << 2 20的二进制补码:0001 0100 向左移动两位后:0101 0000 结果:r = 80
-
负数:r = -20 << 2 -20 的二进制原码 :1001 0100 -20 的二进制反码 :1110 1011 -20 的二进制补码 :1110 1100 左移两位后的补码:1011 0000 反码:1010 1111 原码:1101 0000 结果:r = -80
-
正数:r = 20 >> 2 20的二进制补码:0001 0100 向右移动两位后:0000 0101 结果:r = 5
-
负数:r = -20 >> 2 -20 的二进制原码 :1001 0100 -20 的二进制反码 :1110 1011 -20 的二进制补码 :1110 1100 右移两位后的补码:1111 1011 反码:1111 1010 原码:1000 0101 结果:r = -5
-