问小白 wenxiaobai
资讯
历史
科技
环境与自然
成长
游戏
财经
文学与艺术
美食
健康
家居
文化
情感
汽车
三农
军事
旅行
运动
教育
生活
星座命理

原码、反码、补码、移码的计算转换

创作时间:
作者:
@小白创作中心

原码、反码、补码、移码的计算转换

引用
CSDN
1.
https://m.blog.csdn.net/qq_52964132/article/details/140052527

在计算机科学中,原码、反码、补码和移码是表示二进制数的四种不同方式。本文将详细介绍这四种编码方式的转换规则,并通过具体例子进行验证。

正数

对于正数来说,原码、反码和补码都是一样的,不会发生变化。因此,在计算时,首先需要查看第一位符号位,如果发现是正数,那么三者都不变。移码则是在补码的基础上将符号位取反。

负数

负数的编码转换规则相对复杂一些。

原码 & 反码

  • 符号位不变
  • 数值位都取反

反码 -> 补码

  • 末尾加1

原码 <-> 补码

  • 从右向左找到第一个“1”
  • “1”左边所有的数值位按位取反

补码的相反数

  • 取反(按位取反):将补码中的每一位取反,即0变为1,1变为0。
  • 加1:在取反后的结果上加上1。

例子
假设有一个8位补码表示的数 00001001(即十进制的9),我们想要将其变为其相反数。

  • 原数:00001001
  • 取反后:11110110
  • 加1后:11110111

因此,00001001 的相反数是 11110111,即十进制的 -9。

验证
为了验证这个结果,我们可以将 11110111 转换回十进制:

  • 最高位是1,表示这是一个负数。
  • 取反:00001000
  • 加1:00001001

结果是9,但由于最高位是1,所以是 -9。

特殊情况
对于补码表示的最小值(例如8位补码的最小值是 10000000,即 -128),其相反数在补码系统中没有对应的正数表示,因为补码系统的正数范围比负数范围少1。在这种情况下,最小值的相反数仍然是它自己。

移码

移码是在补码的基础上将符号位取反。

方法总结

  1. 首先根据符号位判断正负
  2. 若为正,则都不变,移码变符号位;若为负,则需要进一步的分情况讨论
  3. 若为原反,符号不变数值变;若反补,单向末位要加1;若原补,从右到左先找“1”,1左取反;若补反,先变原码再反码;若有移,先变补码再变化

练习

© 2023 北京元石科技有限公司 ◎ 京公网安备 11010802042949号