算术移位后数值含义及补码右移结果转换疑问咨询
算术移位后的数字代表什么含义?
首先得抓住一个核心前提:计算机里的负数是以补码形式存储和参与运算的,算术右移是针对补码的操作,移位后的结果依然是补码,不是我们日常直观理解的原码——这就是你疑惑的关键所在。
咱们结合你的计算过程一步步拆解:
原数转补码(存储阶段):
- 十进制-100的8位原码是
11100100(最高位的1是符号位,后面的01100100是100的二进制) - 取补码(除符号位外取反加1)得到
10011100——这才是计算机实际存储的数值。
- 十进制-100的8位原码是
算术右移3位(运算阶段):
算术右移的规则是符号位保持不变,右侧补符号位的值(负数的符号位是1,所以每次右移都补1)。对10011100右移3位后得到11110011——注意,这个结果还是补码形式的负数,绝对不能直接当成无符号数解读成十进制13。补码转原码(解读阶段):
要得到我们能看懂的十进制数,必须把补码转回原码。而补码的补码就是原码:对11110011取补码(除符号位外取反加1),得到原码10001101——最高位的1表示负数,后面的数值部分0001101对应十进制13,所以最终结果是-13。
针对你的疑问总结:
为什么要再次取补码?因为算术移位后的结果还是补码,不是原码。我们日常说的十进制负数对应的是原码格式,所以必须把移位后的补码转换为原码,才能得到正确的带符号十进制数——这就是最终答案是-13而非13的原因。
内容的提问来源于stack exchange,提问作者JustWe




