关于移码的疑惑

各位大神好,关于移码的计算,书上给过这样一个结论:
如果机器字长为n,规定偏移量为2^(n-1)那么移码等于补码符号位取反:
例如:-7的移码为01111001(因为-7的补码为11111001)

后来我看到一篇博客,是关于计算浮点数阶码的,其中他计算得到7的移码在偏移量为127的情况下为10000110:
也就是7的原码+偏移量的原码(00000111+01111111 = 10000110)

clipboard.png

上面的结果,在《软件设计师教程》这本书中也得到了验证:

clipboard.png

那么我就想,通过博客中计算移码的方式来验证一下前面的结论(移码等于补码符号为取反):
-7的原码(10000111)+ 偏移量原码(这里偏移量应该为2^(n-1)即128的二进制形式10000000) = 00000111

结果发现:移码符号位取反的结果为 01111001 ,而使用博客中方法计算结果为 00000111
疑问:为什么两个结果不一样呢?移码到底应该怎样计算得到呢?

书中只说了偏移量为2n-1时,移码等于补码符号为取反,但是如果偏移量不为2^(n-1)时,那么一个原码的移码该怎么计算得到呢?百度的结果都说的不明白,还请大神们指点一下,谢谢了。

阅读 5.6k
2 个回答

博客有误,相加的两者都应该是补码。只是恰好他算的是正数原码补码相同,所以结果正确。而你算的是负数所以自然得不到正确结果

注意看上文:书中讲的是:对于负数的补码做偏移。也就是说-7的原码是10000111,而它的补码是11111001,再强调一遍:是对补码做偏移,而不是对原码做偏移,所以得到的移码结果为01111001

而在下方你用博客中方法计算的时候,是直接对-7原码做偏移,当然得到了不同的结果。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进