原码反码与补码
sign-magnitude representation
sign-magnitude(原码)表示,其实现的原理是取二进制数的最高位(左起第一位)为符号位,约定符号位为0时表示正数,符号位为1时表示负数,其余二进制位则用于待表示数值的绝对值。
以四位的二进制数为例,则其对应的数值表示如下:
binary | decimal | binary | decimal |
---|---|---|---|
0000 | +0 | 1000 | -0 |
0001 | 1 | 1001 | -1 |
0010 | 2 | 1010 | -2 |
0011 | 3 | 1011 | -3 |
0100 | 4 | 1100 | -4 |
0101 | 5 | 1101 | -5 |
0110 | 6 | 1110 | -6 |
0111 | 7 | 1111 | -7 |
使用原码表示正负数有如下的特点
- 0的表示冗余:+0与-0的两种表示
- 一对相反数之和不为0,有悖于常规的数学计算思维
- 整数与负数的绝对值范围相同:0-7
one’s complement representation
one’s complement(反码)表示,其实现的原理是反转正二进制数的所有二进制位,以得到该二进制数的负数表示。
以四位的二进制数为例,则其对应的数值表示如下:
binary | decimal | binary | decimal |
---|---|---|---|
0000 | 0 | 1111 | -0 |
0001 | 1 | 1110 | -1 |
0010 | 2 | 1101 | -2 |
0011 | 3 | 1100 | -3 |
0100 | 4 | 1011 | -4 |
0101 | 5 | 1010 | -5 |
0110 | 6 | 1001 | -6 |
0111 | 7 | 1000 | -7 |
1111 | 8 | 0000 | -8 |
使用反码表示正负数有如下特点:
- 0的冗余表示:+0与-0的两种表示
- 实现了一对相反数之和为0的数学逻辑
- 整数与负数的绝对值范围相同:0-8
two’s complement representation
two’s complement(补码)表示,其实现的原理是取二进制数的最高位为符号位,约定符号位为0时表示正数,符号位为1时表示负数,其与原码表示的不同点,在于其最高位具有两种特性:
- 最高位约定用0与1来区别正负数(原码仅有该特性)
- 最高位仍然具有其对应的权重值
以四位二进制数为例,则对应的数值表示如下:
binary | decimal | binary | decimal |
---|---|---|---|
0000 | 0 | ||
0001 | 1 | 1111 | -1 |
0010 | 2 | 1110 | -2 |
0011 | 3 | 1101 | -3 |
0100 | 4 | 1100 | -4 |
0101 | 5 | 1011 | -5 |
0110 | 6 | 1010 | -6 |
0111 | 7 | 1001 | -7 |
1000 | -8 |
使用补码表示正负数有如下特点:
- 0的表示具有唯一性
- 实现了一对相反数之和为0的数学逻辑
- 数与负数的绝对值范围不同