浅解析原码 反码 补码 移码 以及计算机中为何要使用补码当作存储形式 为什么补码的范围比原码和反码多1

我们日常所说的二进制 十进制 都是在原码的角度
比如说 十进制数10 转成二进制 就是 0000 1010
(在计算机中一个数字是要占一个字节的 一个字节是8位所以是0000 1010)

所以数字10的
原码:0000 1010

同理数字-10的
原码:1000 1010 (首位理解为符号位)

那么现在问题来了,如果这个时候需要做一个减法运算,例如10-10的运算,因为计算机中没有减法器,所以我们只需要通过10+(-10)就行了
使用原码进行运算得出的结果就是
00001010 + 10001010 = 1001100 = -12 是一个错误的值
所以在计算机不能使用原码进行运算 这个时候引入了反码

反码的规则(正数的反码与原码一致而负数的反码则是符号位不变其余所有位取反)
因此数字10的反码还是 0000 1010
而数字-10 的反码变成了1111 0101
而这个时候再进行运算得出的结果就是 1111 1111 还是不对 因为我们要的结果是0啊

所以这个时候引入了补码
补码的规则(正数的补码与原码一致而负数的补码则是反码+1)
所以这个时候
数字10的补码还是0000 1010
而数字-10的补码则变成了 1111 0110
这个时候再进行运算得出的结果就是 1 0000 0000 这个时候1是模忽略不计 结果就是0,所以计算机中运算都使用补码的形式,至于1是模这个概念我会在后面讲。

最后是移码 这个码的作用就是做浮点运算中的阶码,可以理解为是为了适应数轴而存在的。移码规则(不论 正负 首位相对于补码取反)
比如数字10 的移码就是 1000 1010
-10的移码就是 0111 0110
就简单理解为是为了适应数轴,因为在数轴坐标中10肯定要大于 -10
而反码中把二进制放在数轴上就变成了-10要放在大于10的位置,
因此要首位取反,这样10在坐标轴的位置就大于了-10.

最后来讲一下,进位的问题,大家先看一下一个字节中每一种码所能存储的大小
原码 1111 1111 ~ 0111 1111 也就是 -127 ~ 127 也就是 -(2n-1-1)~ (2n-1-1)

反码 1111 1111 ~ 0111 1111 也就是 -127 ~ 127 也就是 -(2n-1-1)~ (2n-1-1)

最后是补码 这个补码就不一样了它的范围则是-128 ~ 127
这个-128到底是怎么来的呢?罪魁祸首实际是
1000 0000 这个原码 是 -0
这个原码转成反码变成 1111 1111
再转成补码变成 1 0000 0000 1忽略不技

而0000 0000 这个原码是 +0
这个原码转成反码变成 0000 0000
再转成补码变成 0000 0000
所以发现了没有 +0 和 -0 的补码是一致的而原码和反码则是不一致的,1000 0000这个数永远不会被生成
所以在二进制中,为了增大表示范围,强制认为10000000为-128。这样就多表示了一个数。no why。

最后一点 为什么进位的1被忽略了 ,举个例子,现在时钟所指向的是6点钟,你想回到时钟三个小时所指向的位置该怎么办?
第一种方法就是做减法:将时钟往后拉三个小时 自然指向了三个小时之前的位置。
但是!计算机运算就像生命的流动,只能做加法,不能减法,所以想再次回到三个小时的位置只能让时钟往前走,转过一圈后再次回到那个位置!
那个位置是 6 - 3 = 3
所以
第二种方法就是做加法:将时钟往前拉(12 - 3)个小时 因为时钟一圈是12个小时,12就是时钟的模。
那个位置是 (6 + (12 -3))=15 把15理解成12进制 意思就是逢12进1 结果就是13把进位1忽略不计,结果就是3,实际上钟没有15这个数字,但是我们理解成15,就代表他又多走了一圈。

计算机的进位也是如此,因为计算机没有减法器,也只能通过进位来回到原来的位置,做减法运算。
我讲的可能不清楚,大家多百度别人的,就行。

  • 6
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

举世无双勇

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

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

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

打赏作者

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

抵扣说明:

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

余额充值