1.移位是在二进制下进行。
2.数值是以二进制原码表示,二进制补码存放的。
3.正数的原码,反码,补码相同;负数的补码是原码符号位不变取反后加1.
4.右移后,最高位补什么由原有的数据的最高位值而定:最高位是0,则右移后,用0补空位;最高位是1,
则用1补空位。
下面来具体说明:因java中int数据是32位的,这里为了方便只写16位。
正数的就不说了。
以-6为例:
原码:1000 0000 0000 0110
反码:1111 1111 1111 1001
补码:1111 1111 1111 1010
右移2位后:
--11 1111 1111 1110,因为原数据的最高位是1,所以用1补空格,
则移位后的补码为:
1111 1111 1111 1110
则反码就是补码减1:
1111 1111 1111 1101
那么原码就是反码符号位不变取反:
1000 0000 0000 0010(最高位是符号位,是负数)
这个值就是-2。
|