原码
原码,顾名思义就是现实生活中表示的码,原来的码。其中最高位为符号位,0代表正数,1代表负数
反码
正数的反码,就是其本身
负数的反码,就是在原码的基础上,符号为不变,其余各位取反
补码
正数的补码,就是其本身
负数的补码,就是在原码的基础上,符号位不变,其余各位取反后+1,即反码+1
Example
以8位二进制为例
0000 0001 1的原码
1000 0001 -1的源码
进而,8位二进制可表示[1111 1111, 0111 1111],即[-127, 127]
Exercise
例1:
5 -1 的运算
即 5 + (-1)
0000 0101 --- 5 二进制原码
1000 0001 --- -1 二进制原码
计算机不管这些,我只要补码(相加,计算机表示只会+ 谢谢),其他爱谁谁
0000 0101 --- 5 二进制原码 (搬下来方便取反)
0000 0101 --- 5 补码 正数的补码,就是其本身
1000 0001 --- -1 二进制原码 (搬下来方便取反)
1111 1111 --- -1 补码 负数 符号位不变其余按位取反,再+1
补码相加↓
0000 0101 --- 5
1111 1111 --- -1
1 0000 0100 -- 相加的结果 溢出位不要了
0000 0100 = 4
例2: 3 -5
即 3 + (-5)
0000 0011 ---- 3 原码
1000 0101 ---- -5 原码
0000 0011 ---- 3 补码
1111 1011 ---- -5 补码
相加
1111 1110 ----补码相加结果(负的)
1000 0010 --- 负数 符号位不变其余按位取反,再+1 (逆向算回去了-二进制原码)
1000 0010 = -2