位运算技巧

位运算技巧 #

1、转换操作 #

  1. 转小写
('a' | ' ') = 'a'
('A' | ' ') = 'a'
  1. 转大写
('b' & '_') = 'B'
('B' & '_') = 'B'
  1. 互换
('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. 位1的个数
while(n!=0){ n=n&(n-1); res++;}
  1. 判断一个数是不是 2 的指数
return(n&(n-1))==0;