这里只讨论右移,左移正数负数都是一样的,最低位补0。
在计算机中,数值都是以二进制的形式进行操作的,并且位运算符的操作对象是补码。
正数: 原码=反码=补码
负数: 原码 ----> 反码 (取反) ---->补码 (+1)
演示:
将正整数10右移两位
原码:0000 0000 0000 0000 0000 0000 0000 1010
因为是正数,所以可以直接操作进行位移。
计算结果为0000 0000 0000 0000 0000 0000 0000 0010
转化为十进制,结果为:2
将负整数-10右移两位
原码:1000 0000 0000 0000 0000 0000 0000 1010
这时就要计算出补码了:
- 取反,符号位不变,不参与取反
1111 1111 1111 1111 1111 1111 1111 0101- +1
1111 1111 1111 1111 1111 1111 1111 0110- 位移,右移最高位补1
1111 1111 1111 1111 1111 1111 1111 1101
因为这里是补码,计算完成之后要还原为原码,有两种形式:取反 ,+1; 或者 -1 ,取反:
- 取反
1000 0000 0000 0000 0000 0000 0000 0010- +1
1000 0000 0000 0000 0000 0000 0000 0011
转化为十进制,结果为: -3