原码就是二进制数;
-5的原码:
10000000000000000000000000000101
反码:反码和原码除了第一位相同,其他相反,0变成1,1变成0;
-5的反码:
111111111111111111111111111111111010
补码:正数的补码就是原码,而负数补码是反码+1;
补码也是内存真正储存的数。
什么是整形提升举个例子:
#includeint main() { char a = 3; char b = 127; char c = a + b; printf("%dn",c); //结果应该为130 }
但实际结果:
为什么呢,这就涉及到整形提升的概念了。
在int a=3中,a为:
00000000000000000000000000000011;
但是char只有1个字节,所以char a=3为:
00000011 --a
char b=127:
011111111 --b
c=a+b
10000010 --c
#includeint main() { char a = 3; char b = 127; char c = a + b; //10000010 printf("%dn",c); //而因为要输出的是int型,系统会将c变成32位 //添加的数和第一位数相同 //11111111111111111111111100000010-补码 //11111111111111111111111100000001-反码 //10000000000000000000000011111101-原码 }
将原码 ·100000000000000000000000011111101转换为10进制就是-126了。



