在上课听老师讲的时候我们不难会听见,整形数据在内存中存储的时候用的是补码。只是为什么呢?
在我个人理解看来一共有四个原因:
一.因为CPU中只有加法器。(我们所谓的减法,乘法,除法等等......是基于加法进行完成的)
二.为了维持计算的精准度。(稍后讲)
三.补码可以可以利用1.转化为原码。
四.补码可以带着最高位(符号位)进行运算。
第二点解释:我们可以在自己的编译器上去尝试写出(我用的vs2022)(原反补概念只针对于负数,正数的原反补相同)
如果我们将a + b 利用它们的原码加起来我们会发现答案并不 = 0,所以就显示出了我们计算机在进行计算的时候并不是简单的利用原码相加(要不怎么说前面的科学家都是巨人,我们只是站在巨人的肩膀上呢),科学家们就整出了个补码的概念,我们利用补码相加的时候我们会发现答案是1后面32位 0 ,但是我们的计算机(32位)只有32个字节所以要进行舍去,舍去了最高位1为了保留精度。
第三点:我们如何将补码转化为原码呢,原码转化成补码经过了取反+1,那我们是否是利用-1再取反呢,细心的人就会发现,当补码再次进行取反+1时
这里用了加法而非减法。
第四点:这里的最高位也就是符号位我们是带着一起进行运算的避免出现复杂运算
以上观点纯个人理解,如有疑惑欢迎留言,如发现错误感谢指正