位运算技巧 #
1、转换操作 #
- 转小写
('a' | ' ') = 'a'
('A' | ' ') = 'a'
- 转大写
('b' & '_') = 'B'
('B' & '_') = 'B'
- 互换
('d' ^ ' ') = 'D'
('D' ^ ' ') = 'd'
2、正负号一样? #
int x = -1, y = 2;
bool f = ((x ^ y) < 0); // true
int x = 3, y = 2;
bool f = ((x ^ y) < 0); // false
3、n&(n-1)
的应用
#
用于消除n的二进制表示中的最后一个1。
- 位1的个数
while(n!=0){ n=n&(n-1); res++;}
- 判断一个数是不是 2 的指数
return(n&(n-1))==0;