逻辑运算
0^a=a
a^a=0
a=ab,b=ab,a=a^b,#a和b的值交换
right_one=a&(~a+1) #找到二进制a里最右边的1所在位置 其他位置填充0,由此法可计算,假如a=x^y,那么x和right_one最右边1的位置相同,那么right_one&x!=0
位运算
a>>1 等价于 a//2
a<<1 等价于a*2
更加以上性质,由于位运算速度更快,可以用来替换高密度的乘除运算
计算(a+b)/2时可以转换成b+(a-b)/2,可以防止a+b值溢出错误
网友评论