| 四位二进制数 | 十进制(反码) | 十进制(补码) |
|---|---|---|
| 0000 | 0 | 0 |
| 0001 | 1 | 1 |
| 0010 | 2 | 2 |
| 0011 | 3 | 3 |
| 0100 | 4 | 4 |
| 0101 | 5 | 5 |
| 0110 | 6 | 6 |
| 0111 | 7 | 7 |
| 1000 | -7 | -8 |
| 1001 | -6 | -7 |
| 1010 | -5 | -6 |
| 1011 | -4 | -5 |
| 1100 | -3 | -4 |
| 1101 | -2 | -3 |
| 1110 | -1 | -2 |
| 1111 | 0 | -1 |
大部分计算机使用的都是补码(two complement)体系,这种体系中最高位即符号位产生的进位会被丢弃,如1100(-4)+1111(-1)=1011(-5);这种算法 取反后加1 相当于对十进制数取相反数,取反相当于去相反数减1,即~x=-x-1。
而IP数据报与UDP数据报检验和的算法采用反码体系(one complement),这种体系中最高位产生的进位会加给最低位,如1110(-1)+1001(-6)=0111+0001=1000(-7)。用这种算法 取反 相当于对十进制取相反数。检验和算法实际为x+(~x)=x+(-x)=0(反码全为1)取反后全为0。
本文详细解析了二进制数的补码和反码表示方法,包括它们在计算机体系中的应用,例如补码用于大多数现代计算机中进行数值运算,而反码则应用于IP数据报和UDP数据报的校验和计算。文章还介绍了如何通过取反和加一等操作实现十进制数的负数表示。
5258

被折叠的 条评论
为什么被折叠?



