(C语言)原、反、补码
1.原码
数最原始的二进制码
120
01111000
-32
10010111
-0:1000 0000
+0:0000 0000
-1:1000 0001
+1: 0000 0001
1±1?
0000 0001
1000 0001
1000 0010 = -2
注:负数如果在计算机中用原码存,会导致两个问题,负数运算结果不正确,0的状态还有两种
2.反码
正数的反码不变,负数的反码(符号位不变,其它位取反)
-0:1111 1111
+0:0000 0000
-1:1111 1110
+1: 0000 0001
1±1?
0000 0001
1111 1110
1111 1111 = -0
注:负数如果在计算机中用反码存,负数运算结果正确,但是0的状态还是有两种
3.补码
正数的补码不变,复数的补码等于反码加1
-0:0000 0000
+0:0000 0000
-1:1111 1111
+1: 0000 0001
1±1 = 0
注:如果计算机中用补码去存,负数运算结果是正确的,0的状态只有一种
4.补码求原码
-23:
原:10010111
反:11101000
补:11101001
反码:10010110(补码求原码:符号位不变,其它位取反)
原码:10010111(反码求原码:反码+1)
注:1)赋值时(输入),赋的是十进制,给的是原码。如果赋值给的是八进制或者十六进制给的是补码
2)打印时(输出),十进制打印要的是原码,如果是十六进制或八进制打印的是补码