在C/C++中,有符合整形类型按补码存储,无符号类型整形按原码存储。
如:
int a = ~1;
std::cout << a << std::endl;
输出为-2;
int型 1的源码:
00000000 00000000 00000000 00000001
对1进行按位取反:
这时候就“1”中的存储的位数变成了:
11111111 11111111 11111111 11111110
然后"~1"表现出来的实际数就是对上面的求补码:
10000000 00000000 00000000 00000010 (求补码方法:对于正数,原码等于补码。对于负数,符合位不变,其他位按位取反,数值加1)
所以存储到a的值为-2
-2的二进制表示是10000000 00000000 00000000 00000010
但是实际存储在内存中的是其补码11111111 1111111 1111111 11111110
5417

被折叠的 条评论
为什么被折叠?



