You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

算术移位后数值含义及补码右移结果转换疑问咨询

算术移位后的数字代表什么含义?

首先得抓住一个核心前提:计算机里的负数是以补码形式存储和参与运算的,算术右移是针对补码的操作,移位后的结果依然是补码,不是我们日常直观理解的原码——这就是你疑惑的关键所在。

咱们结合你的计算过程一步步拆解:

  1. 原数转补码(存储阶段)

    • 十进制-100的8位原码是11100100(最高位的1是符号位,后面的01100100是100的二进制)
    • 取补码(除符号位外取反加1)得到10011100——这才是计算机实际存储的数值。
  2. 算术右移3位(运算阶段)
    算术右移的规则是符号位保持不变,右侧补符号位的值(负数的符号位是1,所以每次右移都补1)。对10011100右移3位后得到11110011——注意,这个结果还是补码形式的负数,绝对不能直接当成无符号数解读成十进制13。

  3. 补码转原码(解读阶段)
    要得到我们能看懂的十进制数,必须把补码转回原码。而补码的补码就是原码:对11110011取补码(除符号位外取反加1),得到原码10001101——最高位的1表示负数,后面的数值部分0001101对应十进制13,所以最终结果是-13。

针对你的疑问总结:

为什么要再次取补码?因为算术移位后的结果还是补码,不是原码。我们日常说的十进制负数对应的是原码格式,所以必须把移位后的补码转换为原码,才能得到正确的带符号十进制数——这就是最终答案是-13而非13的原因。

内容的提问来源于stack exchange,提问作者JustWe

火山引擎 最新活动