1.常用位运算操作
(1) 常用的等式: -n=~(n-1)=~n+1 (2) 获取整数n的二进制中最后一个1: n&~(n-1)或者n&(-n)。例如n=010100,则-n=101100,n&(-n)=000100。 (3) 去掉整数n的二进制中最后一个1: n&(n-1)。例如n=010100,n-1=010011,则n&(n-1)=010000。
2.如何位运算实现除2 (num/2)
- 模拟位运算
- 当非负数直接右移即可
- 当负数:模拟法 补码处理
- (num»1)
这段代码模拟了正数到负数转换,由于是int8直接指定了二进制数异或,和取反~一个效果 然后就是逆向还原出除后的正数,但是这样做-1有问题结果为-1,这是因为-1补码为1111 1111 右移动 0111 1111;再逆向,先减一 0111 1110,再低7位翻转0000 0001结果还是1 ; 如果|num|>1,例如 num=-2;补码:1111 1110 -> 0111 1111->0111 1110->0000 0001 -7 补码:1111 1001 -> 0111 1100 -> 0111 1011 -> 0000 0100 (-4)
修正:还原为正数再右移即可 
- 最终正解 x=num
- if(x<0) ((x-1)»1)+1
- else x»1

- 例如+7 和 -7:
- 0000 0111
- 1111 1001
- (a»1)+(−a»1)+1
- 0000 0011 + 0111 1100 + 1 = 0111 1111 + 1= 1000 0000 =-128