在计算机系统中,数据的表示与存储都是以0或1的形式,而表示这些0或1,我们可以将外部数据通过数字电路进行编码,对于有符号数,在计算机系统中有三种编码,即我们通常所了解的编码:原码,反码,补码,而无符号数没有原码,反码,补码之分,况且,我觉得在计算机存储系统领域讨论无符号数是没什么意义的
原码:
正数原码 = 0 + 正数绝对值
负数原码 = 1 + 负数绝对值
例如:
+20的原码:00010100
- 20的原码:10010100
反码:
正数反码 = 正数原码
负数反码 = 负数原码符号位的1不变,绝对值部分按位取反
例如:
+20的原码:00010100
+20的反码:00010100
- 20的原码:10010100
- 20的反码:11101011
补码:
正数补码 = 正数反码 = 正数原码
负数补码 = 负数反码符号位的1不变,绝对值部分+1
例如:
+20原码:00010100
+20反码:00010100
+20补码:00010100
- 20原码:10010100
- 20反码:11101011
- 20补码:11101110
总结:
求解有符号数[正数与负数]的补码的方法:
对于正数:
补码 = 反码 = 原码
对于负数:
1.补码 = 原码 -----[原码符号位不变,其余位按位取反]-----> 反码 -----[反码符号位不变,末位+1]-----> 补码
2.补码 = 负数的绝对值的原码 -----[按位取反,末位+1]-----> 补码
补码的运算原理:
在计算机系统中,CPU仅仅只有加法电路,没有减法电路,采用补码运算的目的,是将减法运算变为加法运算,同时,补码的运算是将符号位也视为数据共同参与数据的运算,其运算结果依然是补码
补码的性质:
1.原码与其补码互为补数关系
2.补码再求补码等于该补码的原码
3.补码的正零与负零表示方法相同
原文:http://www.cnblogs.com/milantgh/p/3925566.html