负数在内存中存储的是二进制的补码,最高位指的是符号位,0代表正数、1代表负数
使用时,打印的是这个数的原码
原码 ——> 反码 ——> 补码:符号位不变,其它位按位取反原码得到反码,反码加1得到补码
#include <stdio.h>
int main()
{
int a = 0; // 4个字节,32个比特位
int b = ~a; // b是有符号的整型,按位取反
printf("%d\n", b); // 使用时,打印的是这个数的原码,返回结果-1
// 0的二进制: 00000000000000000000000000000000
// 反码得到b: 11111111111111111111111111111111,补码
// 补码 ——> 反码:11111111111111111111111111111110,减1
// 反码 ——> 原码:10000000000000000000000000000001,所以最后的结果是-1,
}