原码与反码:
在计算机二进制中,两个数值相加,正数的反码是原码本身,负数的反码是按位取反。
例如:十进制数值1→原码0000 0001→反码0000 0001
十进制数值-1→原码1000 0001→反码1111 1110
两数相加的反码:
正数的反码0000 0001+负数的反码1111 1110=1111 1111(注意此时还是反码),两数相加 的原码:1000 0000→0
反码与补码:
负数的补码是在原来反码的基础上+1,正数的补码为原码不变。
例如:十进制数值1→原码0000 0001→反码0000 0001→补码0000 0001
十进制数值-1→原码1000 0001→反码1111 1110→补码1111 1111
补码在正负数加减法运算时没问题,也不会出现正负零占两个二进制。但 1000 0000 不表示为负零,用来表示什么呢?计算机其实默认把8位有符号二进制 1000 0000 表示为 -128。
运行代码如下:
#include <stdio.h>
#include <inttypes.h>
int main() {
int8_t e = 0b10000000; \\使用int有符号整数类型
printf("%d\n", e);
return 0;
}
运行结果:
-128