原码补码反码的认识

故事的起源

计算机诞生之后,这个简单的机器可以认识二进制数0和1的区别。所以人们用一串二进制数比如1101001来表示一些信息。这是最原始的数字,没有正负之分,也叫无符号数。

原码

后来为了展现出正数负数的差别,人们发明了原码,可以展现生活中数字的正负之分。

一般情况下,第一位留出来当做符号位。0代表正数,1代表负数。这样子,就有了正负之分。但是按照正常生活中,可以知道相反数相加等于0。0001(+1)和1001(-1)相加却不等于0而是1010(-2)。这是不对滴。所以人们发明了反码。

反码

反码主要是针对负数来说的。正数不变,负数符号位不变,其余位取反。这样0001(+1)和1110(-1)相加得到的正好是1111(-0),解决了相反数和为0的问题。

真是聪明的人类,但是还有一个问题啊,就是0000是0,1111也代表0。怪尴尬的。于是人类又继续改进。

补码

补码同样是对负数进行操作的。因为1111,我们想让他变成0000,就末位加1,这样变成10000之后,舍掉最高位,就得到了0000。所以0就统一了,只有0000。那么补码都是反码最后一位加一得到的。原来的1111(-0)没有了,变成了1000(-8)。

到此这么简单理解一下,也能记住啥是补码了。计算机实际计算中没有减法器都是用加法进行计算的,计算机中存储和运算的也都是补码。

删除线格式

然而,当我去逛了一圈知乎之后,看到了大佬们的回答,我才发现补码这个东西啊,真的是非常绝妙了,一个评论里说的:补码本天成,妙手偶得之。

真相应该是:补码的概念在计算机出现之前就已经诞生了,主要是用来解决用加法来代替减法的问题。

在计算机中进行加减运算,都直接将其转化为加法运算。将其补码相加移位即可,溢出部分直接丢掉,剩下的为补码。如果从人的角度想知道这个数是多少,就将这个补码转化为对应原码。而一般计算机不需要知道,计算机存储其补码就可以了。

而这个补数就和计数系统里的模有关系了。知乎上的解读很详细了。我就不写了,可以参考理解一下。

知乎对补码的解释

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值