计算机原码-反码-补码

补码:
计算机里面,只有加法器,没有减法器。
减法,必须用加法来完成。
对于 100 以内的十进制数,《减1》,就可以用《加 99》代替。
比如 25 - 1 = 24,可以写成 25 + 99 = (1)24。
限定了两位数,-1 和 +99 是等效的。
同样,-2,可以用 +98 代替。
……
它们之间,称为《补数》。
100 称为《模》。
利用《模》,求某个负数的《补数》,小学生都会。
---------------------------
对于 8 位二进制数:0000 0000~1111 1111(255),模为256。
-1,可以用 255(1111 1111)代替。
-2,可以用 254(1111 1110)代替。
……
这些二进制数,就称为负数的《补码》。
已知一个负数,求其补码,用模计算一下,大家都能算出来。
求补码,完全可以用十进制数来计算。
原码、反码、求反加一、符号位,这些都是用不着的,瞎忽悠人的。

有符号数字:
原码就是符号位加上真值的绝对值, 即用第一位表示符号, 其余位表示值. 比如如果是8位二进制:
[+1]原 = 0000 0001
[-1]原 = 1000 0001

第一位是符号位. 因为第一位是符号位, 所以8位二进制数的取值范围就是:
[1111 1111 , 0111 1111]

[-127 , 127]

原码
像上段文中举例那样,用机器码表示出来的值称为原码,+2的原码就是00000010,-2的原码是10000010。
反码
反码一般情况下是计算机用处最少用到的表示方式,为什么稍微会谈到,先说下反码怎么表示:如果是正数的反码则是原码本身,没什么变化。如果是负数的反码,则是符号位也就是第一位上的数值不变,其余位取反。比如+2的原码 00000010,那么+2的反码也是00000010。-2的原码表示10000010,反码即为11111101。
补码
补码是计算机的数值运算中用到最多的一种编码方式,具体原因稍微会聊。先说下补码的表示方式,正数的补码就是原码本身,这点跟反码是一样的。负数的补码是其反码+1后的结果。比如+2的补码就是00000010。而-2的补码:11111101(反码)+1 = 11111110。

为什么有补码和反码?
模运算系统
拿生活中的钟表计时方式来说,10点如果变成6点可以往回拨4,10-4=6。也可以顺时针拨8,10+8=18模12=6。可以看出来关于模12,-4和+8是相等的。8就是4关于模12的补码。这样的话可以把所有的减法计算转化成加法运算。

如果是“4位的十进制”模系统运算中,9828-1928运算相当于9828 + (10^4-1928)= 9828+8072 = 17000,取10^4模 = 7000。所以计算机中运算减法的时候,是相当于加上 -1928的补码进行运算的。

其实我们人脑直接用原码进行数值计算是最直观和最简单的,为什么计算机不能直接用数值的原码去进行计算,因为有一个很重要的运算因素存在----负数。我们知道原码的首位是代表符号位0代表正数1代表负数,但是计算机不知道。如果计算1+(-1)那么结果是00000001(+1原码)+10000001(-1原码) = 10000010(原码) = -2 很明显结果是不对的。

那么反码的诞生是否解决了这类的问题?来试试 。1+(-1)= 00000001(原) + 10000001(原) = 00000001(反)+11111110(反) = 11111111(反) = 10000000(原) = -0 注意这里的0是有符号位的是个负值。这与我们数学运算规则不符(虽然现实中0不分正负但是计算机中正确结果应该是+0)

于是最后出现了补码的编码方式进行计算机运算,1+(-1)= 00000001(原) + 10000001(原) = 00000001(反)+11111110(反) = 00000001(补) + 11111111(补) = 00000000(补) = 0,结果正确。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值