在《什么是原码?》那篇文章中我们提到过:原码是人脑最容易理解和计算的表示方式。既然如此,我们为什么还要使用补码呢?
首先,我们来看几个4位二进制数进行运算的例子!
在原码下,1-1=1+(-1)=0001+1001=1010=-2
我们可以看出,由于符号位参与计算,对于减法来说,用原码表示计算结果并不正确。
在反码下,1-1=1+(-1)=0001+1110=1111=-0
我们可以看出,用反码表示计算结果问题出现在“0”这个特殊数值上,正常来说,0不应该带符号,0带符号没有任何意义。
在补码下,1-1=1+(-1)=0001+1111=0000=0
我们可以看出,真值没有问题,0带符号的问题也解决了!
综上所述,我们使用补码的原因主要有以下两个方面:
第一,我们人脑可以知道原码的第一位是符号位,但是计算机不知道,而恰好补码表示中的符号位可以与数值位一起参加运算,弥补了计算机不能辨别符号位的缺憾。
第二,我们人脑可以快速计算减法,但是计算机很难做到,所以我们根据运算法则——减去一个正数等于加上一个负数,将减法运算转换成为加法运算,对计算机而言,这大大地简化了运算的过程。
本文固定URL:https://www.dotcpp.com/qa/42
C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程