带符号异或运算

-1 ^ -1 << 5

第一步 -1 << 5
-1 << 5
1000 0001 << 5
1010 0000

第二步 -1 ^ 1010 0000
1000 0001 原码 ^ 1010 0000 原码
负数异或需要用补码
1111 1110 反码 ^ 1101 1111 反码
1111 1111 补码 ^ 1110 0000 补码 = 0001 1111

结果为正数,所以结果为1+2+4+8+16=31
结果如果为负数,需要结果-1,再取反(由 原码 -> 取反 -> +1 补码 得 补码 -1 -> 取反 -> 原码)

参考:https://blog.csdn.net/romeo12334/article/details/82261319

原文地址:https://www.cnblogs.com/liuqiyun/p/11765102.html