二进制数表示方法:原码反码补码 计算机存储和运算过程中一般会用到原码,反码和补码 下面以8位二进制机器码举例说明: 原码:最高位代表符号位,其余位为数值的绝对值 如:+8 (8’b0000_1000) -8(8’b1000_1000) 反码:存储时正数的反码与原码相同,负数的反码符号位保持不变,其余位数按位取反 如:+8 (8’b0000_1000) -8(8’b1111_1000) 补码:存储时正数的补码与原码相同,负数的补码在反码的最低位+1得到 如:+8 (8’b0000_1000) -8(8’b1111_1001) 举例2:分别写出+3和-3的原码,反码和补码
| +3 | -3 | 原码 | 8’b0000_0011 | 8’b1000_0011 | 反码 | 8’b0000_0011 | 8’b1111_1100 | 补码 | 8’b0000_0011 | 8’b1111_1101 |
注意上表符号位始终保持不变。 二进制减法运算法则:例1: 100-50 由于7位2进制最大表示128,则要表示100最少需要7位,但由于涉及减法运算,所以加一位符号位用8位表示。 100的8位二进制为 8‘b0,110_0100; (红色表示符号位) -50的8位二进制为 8‘b1,011_0010; 反码(为了计算补码)为8‘b1,100_1101 补码:8‘b1,100_1110 实际运算过程为两个二进制补码相加;(可以理解为100+(-50))
由于是8位计算,最后的进位舍去,得到二进制8‘b0,011_0010 = 50(D) 例2: -100-50 由于运算结果为-150 绝对值150最大,7位2进制数最大只能表示128,因此需要8位表示150,又因为是有符号运算,因此至少要用9位去表示-150。
-100的8位二进制为 9‘b1,0110_0100; 反码为9‘b1,1001_1011 补码:9‘b1,1001_1100 -50的8位二进制为 9‘b1,0011_0010; 反码为9‘b1,1100_1101 补码:9‘b1,1100_1110 实际运算过程为两个二进制补码相加;(可以理解为(-100)+(-50))
此时我们得到一个负数9‘b1,0110_1010,但是不要忘记,负数的存储是以补码形式存储的,我们需要把它转化为原码,因为我们太熟悉原码了。
求原码的过程和求反码正好相反,首先减一,得到反码,对反码再求反码,得到原码: 负数9‘b1,0110_1010的反码是9‘b1,0110_1001,原码是9‘b1,1001_0110。
|