int main()
{
int a = 0;
printf("%d", ~a);//~按位取反打印结果 -1
}
整数在内存中占4个bite位
一个整数的二进制有三种表示
对于负数来说 -1
原码:10000000000000000000000000000001
反码:1111111111111111111111111111111111110 原码符号位不变,其他位按位取反
补码:1111111111111111111111111111111111111 反码+1
内存中存储的是补码;
对于正数来说,原码补码反码相同。
所以
a=0的原码是
00000000000000000000000000000000000000000
按位取反
111111111111111111111111111111111111111111111111
因为内存中存储的是反码
所以a=-1.