VC++下按位求反(~)运算符对int型数据求反,结果出乎意料!

来源:百度知道 编辑:UC知道 时间:2024/06/03 20:25:56
#include <stdio.h>
int main()
{
int a = 4;
a = ~a;
printf("%d\n", a);
return 0;
}
输出结果为什么是-5?请高人指点

INT是32位的数据类型,计算机用的补码表示..最高位0为正,1为负,
4即是 00000000 00000000 00000000 00000100
取反后为11111111 11111111 11111111 11111011
补码是由原码取反+1(符号位不变)
所以给~A -1即反即10000000 00000000 00000101
即-5

0000 0000 0000 0100 这个就是正4
取反 : 1111 1111 1111 1011
在计算机里面存储的都是补码,所以变回原数就要取反+1(符号位不变)
得1000 0000 0000 0101 ,这个就是 -5