负数在内存中存储的是二进制的补码,最高位指的是符号位,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, 

}