问答详情
源自:6-3 Linux C位运算之按位异或

按位异或和按位取反的相似之处

我发现  按位异或  的  定位反转反转  功能  和  按位取反  似乎有着共同的作用。

int a = 10;
 printf("按位异或的定位取反功能%d\n按位取反%d\n", a ^ 0xFF, ~a);

结果  245  -11

该代码输出的却不一样。不明白了,求教。

提问者:点杠点杠点 2015-10-26 13:24

个回答

  • onemoo
    2015-10-29 14:45:47

    0xFF 这个是只有低8位为1,高位全是0

    整型10 是低4位为 1010,高位全为0,且一般来说是占用32位。

    你应该明白了吧,区别就在于高位的行为不一样。

    取反是将a高位的0都变成1,这样最高位的符号位也变成1了,所以最终值是负的。

    而异或后,a的后8位都取反了,但前24位保持不变。这样值就是245.