原码、反码和补码
以8位计算为例
原码:正数:数符位为0。负数:数符位为1。
反码:正数:原码本身。负数:数符为1,数值位取反(可以理解为127-绝对值后的正数表示法)。
补码:正数:原码本身。负数:数符位为1,数值位的绝对值取反后最后一位加1。
下面以各种形式分别计算:2+3=5; -2-3=-5 ;2-3=-1
2+3=5 | -2-3=-5 | 2-3=-1 | -2+3=1 | |
原码 | 00000010 = 2 00000011 = 3 + -------- 00000101 = 5 | 10000010 = -2 10000011 = -3 + -------- 10000101 = -5 | 00000010 = 2 10000011 = -3 + -------- 10000001 = -1 | 10000010 = -2 00000011 = 3 + -------- 0000001 = 1 |
反码 | 00000010 = 2 00000011 = 3 + -------- 00000101 = 5 | 11111101 = -2 11111100 = -3 + -------- 11111001 = ? | 00000010 = 2 11111100 = -3 + -------- 11111110 = -1 | 11111101 = -2 00000011 = 3 + -------- 0000001 = ? |
补码 | 00000010 = 2 00000011 = 3 + -------- 00000101 = 5 | 11111110 = -2 11111101 = -3 + -------- 11111011 = -5 | 00000010 = 2 11111101 = -3 + -------- 11111111 = -1 | 11111110 = -2 00000011 = 3 + -------- 0000001 = 1 |
(注:红色为出错)。
具体的实现,有待于参考计算机组成原理,以进一步深究。