前言:计算机中的数据都是以补码形式存在的,那么什么是补码呢?
1、首先了解原码
计算机只能识别二进制0和1,但是我们日常用的数据是有正负符号的,所以需要使计算机中的二进制数据也能表示符号,这就是原码、反码、补码的出现需求。
有符号的数据表示法为:原码、反码、补码。因为数据是有符号的,所以规定最高位是符号位,其它位是数据位,并且,符号位也是参与运算的。
原码:将一个整数,转换成二进制形式,就是它的原码。以十进制数据 7 和 -7 ,字长为8为例。
其中7的最高位0、-7的最高位1为符号位,分别表示正号、负号。
2、反码
正数的反码:和原码相同。
负数的反码:符号位不变,数据位取反(0变1,1变0)。
所以:
3、补码
正数的补码:和反码相同。
负数的补码:反码+1。
所以:
4、举例:计算机是如何计算 1 - 1 的?
计算机中只有加法。实际运算的是 1 + ( -1 ),如下:
计算机数据以补码形式存在,所以求出1和-1补码分别为:00000001 和 11111111,相加:
结果1溢出,舍弃,得到相加结构为0。这就是计算机计算1 - 1的过程。
附:
机器数: 在计算机行业,一个数的二进制表示形式, 叫做这个数的机器数,原码、反码、补码都是机器数的不同表现形式。
真值:因为第一位是符号位,所以机器数的形式值不等于真正的数值。为区别起见,将带符号位的机器数对应的真正数值称为机器数的真值。
字长:在同一时间中处理的二进制数的位数叫字长(比如01001001字长为8)。通常称处理字长为8位数据的CPU叫8位CPU,此外还有32位和64位的CPU,现在CPU大多是64位的,但基本都以32位字长运行,没能展示它的字长的优越性,是因为它必须与64位软件(如64位的操作系统等)相辅相成,也就是说,字长受软件系统的制约,例如,在32位软件系统中64位字长的CPU只能当32位用。