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


正数

原码反码补码 都是一样的不会发生变化

因此,计算的时候先看第一位 符号位 ,只要能发现是正数,三者都不变
移码 在补码基础上将符号位取反


负数

负数的情况比较复杂


原码 & 反码

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

反码 -> 补码

  • 末尾 加 1

原码 <-> 补码

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

原理
末位加1,各项从右依次取反,因此从右向左走第一个“1”的右面补码都已经按位取反,负负得正,只需调整左面即可


补码的相反数

取反(按位取反):将补码中的每一位取反,即0变为1,1变为0。这一步操作称为“取反”或“按位取反”。

加1:在取反后的结果上加上1。

两个步骤结合起来,就可以将一个补码表示的数变为其相反数。


例子

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

取反

  • 原数:00001001

  • 取反后:11110110

加1:

取反后的数:11110110

加1后:11110111

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


验证

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

最高位是1,表示这是一个负数。

取反:00001000

加1:00001001

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

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


移码 <- Other

在补码基础上将符号位取反


方法总结

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

练习

在这里插入图片描述


在这里插入图片描述
如有问题,敬请指正~

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

司南锤

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值