原码、反码与补码
1 原码
前提条件:用8位表示1个数。
下面列出的是1、2、3、-1、-2、-3的原码:
1:0000 0001
2:0000 0010
3:0000 0011
-1:1000 0001
-2:1000 0010
-3:1000 0011
2 反码
对于正数,反码与原码相同;
对于负数,反码等于原码取反,但符号位不变。
下面列出的是1、2、3、-1、-2、-3的反码:
1:0000 0001
2:0000 0010
3:0000 0011
-1:1111 1110
-2:1111 1101
-3:1111 1100
3 补码
对于正数,补码与原码相同;
对于负数,补码等于反码+1。
下面列出的是1、2、3、-1、-2、-3的反码:
1:0000 0001
2:0000 0010
3:0000 0011
-1:1111 1111
-2:1111 1110
-3:1111 1101
4 计算机存储方式
测试程序如下:
#include <stdio.h>
int main(void)
{
int a = 1;
int b = 2;
int c = 3;
int d = -1;
int e = -2;
int f = -3;
printf("a = 0x%x, %d\n",a,a);
printf("b = 0x%x, %d\n",b,b);
printf("c = 0x%x, %d\n",c,c);
printf("d = 0x%x, %d\n",d,d);
printf("e = 0x%x, %d\n",e,e);
printf("f = 0x%x, %d\n",f,f);
}
输出结果如下:
a = 0x1, 1
b = 0x2, 2
c = 0x3, 3
d = 0xffffffff, -1
e = 0xfffffffe, -2
f = 0xfffffffd, -3
Press any key to continue
根据输出结果可以知道,在计算机内,正负数都以补码的形式进行存储。
5 补码存储的原因
对于正数,原码与补码都一样,无所谓;
对于负数,若用原码进行计算,会出现错误。
例如(-1)+(-2)=(-3)
原码与补码的计算结果如下如图所示:
6 参考
负数在计算机中怎样存储