每次遇到负数的位运算问题都是当时记住了之后又忘记了,先写在博客上方便以后查询。
负数的运算是以补码形式进行的,如果运算结果首位为1,结果也需要求一次补码
如何求补码
正数的补码还是自身,负数的补码:首位的1不变,其余位取反加1(更方便的一种记法是从右向左遇到第一个1为止,这个1前面的位取反,首位不动)
以-10为例:
1000 0000 0000 0000 0000 0000 0000 1010
最右边的1和1后面的不变,首位不变,其余位取反:
1111 1111 1111 1111 1111 1111 1111 0110
负数的异或运算
以 10 ^ -10
为例:
0000 0000 0000 0000 0000 0000 0000 1010
^ 1111 1111 1111 1111 1111 1111 1111 0110
= 1111 1111 1111 1111 1111 1111 1111 1100
得到的结果首位为1,所以再求一次补码:
1000 0000 0000 0000 0000 0000 0000 0100
即 -4