原码补码反码。

有任何不懂的问题可以评论区留言,能力范围内都会一一回答

我们上一章讲了十进制整数如何转换成原码,但是计算机内部储存计算的都是补码,为什么不用看起来更好换算的补码呢,因为计算机内部(cpu只有加法器)所以计算a-b这样的运算只能通过a+(-b)计算,这个时候如果用原码计算会出现很大的问题,

举个例子

1 的原码是0000 0001

-1的原码是1000 0001

这两个原码相加得到 1000 0002 也就是-2

这显然是不合理的,但是问题出现在哪呢,问题就出现在符号位了

符号位原本是作为表示正负的,一旦参与相加的计算,就会被当作值参与计算,这个时候就会出问题

那么怎么解决这个问题呢?

于是就出现了补码

原码计算出问题的归根到底的原因是因为符号位出问题了,或者说符号位不统一,

因此我们规定,非负数的原码补码反码都是一样的

对于负数

我们就要对原码进行一些操作来获得补码了

要得到补码得先得到反码

反码就是原码符号位不变数值位全部取反,比如,

-1的原码是     1000 0001

-1的反码就是 1111 1110

负数的补码等于其补码+1

因此-1的补码就是 1111 1111

因此这个时候

-1的补码 1111 1111

1的补码 0000 0001(非负数的原码反码补码一样)

其补码相加就是1 0000 0000

溢出的那一位会自动被截断,

因此得出结果是0000 0000(补码)

但是由于非负数原码补码反码相同

所以0000 0000(补码)的原码也是0000 0000 及换算成十进制正数也就是0

所以1+(-1)=0;这个地方计算就对了,但是还有一个问题就是补码的底层逻辑是啥?

为啥原码解决不了的问题补码可以做到呢?

这个地方比较麻烦,放在下章节讲解

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值