负数在电脑中是以补码形式存储的,移位运算也是在补码的的基础上进行的。首先说一下如何求得一个负数的补码,讲一个负数对应的正数的二进制形式写出,然后将每一位对应取反(包含符号位在内),得到的结果末位加一,就得到负数的补码,
如-6对应的正数为6,6对应的二进制是0000 0110,
各位对应取反(包含符号位在内)结果为1111 1001,
末位加1后为1111 1010,这个即是-6的补码,
然后右移2位,高位空位填补符号位1,所得结果为:1111 1110 这个数就是-2的补码。
想验证是否是-2的补码,可以用上述求负数补码的方式求得所对应的正数,即可知道结果是否是-2.
将1111 1110 各位对应取反得 0000 0001,末位加1得0000 0010,这个是2,是-2对应的正数,所以-6>>2得到的结果为-2.
希望帮到楼主!{:soso_e100:} |