计算机中的数值信息分成整数和实数两大类。整数不使用小数点,或者说小数点总是隐含在个位数的右边,所以整数也称为“定点数”。相应地,实数也称为“浮点数”。计算机在存储或运算时,需要采用一种编码形式表示数值,这种表示方式就分为原码、反码和补码。
1. 原码
最高位是符号位,0表示正号,1表示负号,其余的n-1位表示数值的绝对值(真值)。
数值 | +0 | -0 |
---|---|---|
原码(按8位二进制示例) | 0 0000000 | 1 0000000 |
数值 | +2 | -2 |
原码(按4位二进制示例) | 0 010 | 1 010 |
原码运算——加法
运算 | 数值 | 原码 | 原码转十进制 |
---|---|---|---|
1 | 00000001 | 1 | |
+ | 2 | 00000010 | 2 |
= | 3 | 00000011 | 3 |
原码运算——减法
运算 | 数值 | 原码 | 原码转十进制 |
---|---|---|---|
1 | 00000001 | 1 | |
+ | -1 | 10000001 | -1 |
= | 0 | 10000010 | -2 |
注意,计算机中减法相当一个正数加上一个负数,原码减法出现问题,一个数加上它本身的相反数不等于0,于是反码登场。
2.反码
正数的反码,等于原码。
负数的反码,按原码除符号位外,其它位取反。
数值 | +0 | -0 |
---|---|---|
原码(按8位二进制示例) | 0 0000000 | 1 0000000 |
反码(按8位二进制示例) | 0 0000000 | 1 1111111 |
数值 | +2 | -2 |
原码(按4位二进制示例) | 0 010 | 1 010 |
反码(按4位二进制示例) | 0 010 | 1 101 |
之前原码中减法出现问题,一个数加上它本身的相反数不等于0,我们现在用反码再试一下。
运算 | 数值 | 原码 | 反码 | 反码转原码转十进制 |
---|---|---|---|---|
1 | 00000001 | 00000001 | 1 | |
+ | -1 | 10000001 | 111111110 | -1 |
= | 0 | - | 11111111 | -0 |
反码相加的最后结果11111111,要先转成原码(即除符号位外的相反数)为10000000,原码再转十进制,最终结果为-0(负零也是零,算是对了吧!)。
那么,如果(-1)+(-3)结果是多少?
运算 | 数值 | 原码 | 反码 | 反码转原码转十进制 |
---|---|---|---|---|
-1 | 10000001 | 11111110 | -1 | |
+ | -3 | 10000011 | 11111100 | -3 |
= | -4 | - | 11111010 | -5 |
注意,两个不同负数值相加,采用反码运算的结果也不正确,于是补码登场。
3.补码
正数的补码,等于原码。
负数的补码,等于反码+1。
数值 | +0 | -0 |
---|---|---|
原码(按8位二进制示例) | 0 0000000 | 1 0000000 |
反码(按8位二进制示例) | 0 0000000 | 1 1111111 |
补码(按8位二进制示例) | 0 0000000 | 0 0000000 |
数值 | +2 | -2 |
原码(按4位二进制示例) | 0 010 | 1 010 |
反码(按4位二进制示例) | 0 010 | 1 101 |
补码(按4位二进制示例) | 0 010 | 1 110 |
负数还有一种计算补码的方法,公式:负数的补码 =(2机器数长度次幂 - |负数的绝对值|)的原码。
例如,若机器字长为4,求-2的补码。
套入公式过程如下:
( 24 - 2) = 14,
14的原码 = 1110,
-2的补码 = 1110。
之前反码计算不同负数值相加出现问题,我们现在再用补码试一下。
运算 | 数值 | 原码 | 反码 | 补码 | 补码转十进制 |
---|---|---|---|---|---|
-1 | 10000001 | 11111110 | 111111111 | -1 | |
+ | -3 | 10000011 | 11111100 | 11111101 | -3 |
= | -4 | - | - | 11111100 | -4 |
补码转十进制的过程如下:
补码 | 11111100 |
---|---|
补码的反码 | 10000011 |
补码的反码的补码 | 10000100 |
补码的反码的补码转十进制 | -(1*22) = -4 |
计算机中均采用补码进行加减运算。
标签:反码,示例,二进制,补码,数值,移码,原码 From: https://blog.csdn.net/markximo/article/details/136908997