因为题目做错了,所以来写文章记录一下。
题目是:求表达式-12>>3的结果?
算术右移 (>>): 低位溢出,符号位不变,并用符号位补溢出的高位;
即,为要处理的数字的左端补一个等于符号位的数字,说人话就是,正数补0,负数补1
负数的右移与正数不同
我们知道,计算机中存储的的数字不是我们表面上看到的数字,计算机所存储和操作的数字是以补码的形式存在的。
既然题目问的问题牵扯到负数了,就得使用上补码了。
原数字:-12
原码:1000 1100
反码:1111 0011 ( 符号位没有发生改变的)
补码:1111 0100
右移3位
补码:1111 1110
反码:1111 1101
原码:1000 0010
结果是-2
再来看机器运行的结果
证明上述过程没有任何问题。