位运算的技巧

1.统计末尾1的个数
int count = 0; int flag = 1; while(flag){ if(num & flag){ count++; } flag = flag << 1; } return count;
2.判断奇偶
return x&1==1
若是奇数返回q否则返回0
3.交换两个数
  a=a^b;
  b=b^a;
  a=a^b;
4.求绝对值
n=(n^n>>31)-(n>>31);
5.对2^k取模
n&((1<<k)-1)
6.自加1
n=-~n;
7.自减1
n=~-n;
8.lowbit(获得最低位的1)
n&(-n)

部分出自以下,感谢大佬的资料
https://blog.csdn.net/qq_35580883/article/details/78318142
http://blog.sina.com.cn/s/blog_66ad7bba0100hf9k.html
http://www.cnblogs.com/liinux/archive/2015/09/01/4775307.html
星星之火,终将成燎原之势
原文地址:https://www.cnblogs.com/xxzh/p/9156173.html