#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
int main()
{
int a = 0;
int b = ~a;
//~是按(二进制)位取反的意思,也就是0变成1,1变成0
// 这里a是一个整型数据,占4个字节,32个比特位
// 所以这里将a的值用二进制表示出来的话是
//00000000000000000000000000000000
//11111111111111111111111111111111
//负数在内存中储存的时候,储存的是二进制的补码
//所以这里按位取反出来的是-1这个数的补码
// 这里还有一个知识,就是二进制的第一位数是符号位,也就是说假如第一位是1,则为负数,第一位为0,则为正数
//那么为什么输出结果为-1呢,这是因为使用的printf打印的是这个数的原码 也就是说这里第一次打印出来的-1是原码,也就是10000000000000001
// 这里涉及了原码 反码 补码的知识
//原码——》补码的计算规则 符号位不变,原码其他位按位取反得到这个数的反码,反码加一得到补码
//而补码的过程则为补码减一变成反码,反码在符号位不变,其他位按位取反变成补原码
// 所以这里的11111111111111111111111111111111是-1的补码,补码减一变成反码
// 11111111111111111111111111111110 这个是-1的反码 反码的符号位不变 其他数按位取反变成这个数的原码
// 10000000000000000000000000000001 所以这个是-1的原码,结果位-1,所以说printf打印出来的结果是-1,因为printf打印出来的是这个数的原码
printf("%d\n", b);
return 0;
}