-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 -> 取反 -> 原碼).net
參考:https://blog.csdn.net/romeo12334/article/details/82261319blog