一、在C语言中~的作用是将一个数二进制全部取反(即就是0变1,1变0),如0
首先0的二进制为:000000000000000000000000000000000
反码为:11111111111111111111111111111111
二、我们操作一下
#include<stdio.h>
int main()
{
int a = 0;
printf("%d\n", ~a);
return 0;
}
这个打印的结果为-1
我们来分析一波
首先0的二进制为:00000000000000000000000000000000 0的反码为:11111111111111111111111111111111 补码就是减1:11111111111111111111111111111110
三、为什么结果是-1呢
1.在C中整数在内存中存在的方式是以补码形式存在的
2.一个整数在二进制中的存在形式有三种
①原码
②反码 //就是原码取反
③补码 //反码+1
3.对于一个整数而言,其原码、反码、补码都是同一个数
4.对于负数来说,存在形式也是补码
举例
对于-1来说
原码:10000000000000000000000000000001 //符号位不变 符号位为1就是负数
反码:11111111111111111111111111111110
补码:11111111111111111111111111111111
在上述代码中为何0按位取反为-1?
不是说负数在内存中是补码吗?0的补码不等于-1的补码啊,这是因为%d是以反码的形式存在,故结果为-1 //%d 打印的是反码 故打印出的结果为-1