【基础】c++位运算

目录 

& 与          << 左移

 |  或          >> 右移

^ 抑或

用法


& 与     (and)
1 & 1 = 1      其他组合都为0
1.判断奇偶     奇数的最后一位是1, 偶数的最后一位是0
2.判断某一位是1还是0

| 或   (or)
1 | 1 = 1;    0 | 0 = 0;
1 | 0 = 1;    0 | 1 = 1;
只要有一个是 1 就返回 1

^ 抑或   (xor)
1 ^ 1 = 0;   0 ^ 0 = 0;
1 ^ 0 = 1;   0 ^ 1 = 1;
注意 : 满足 ( a ^ b) ^ b = a;

以上这些都可以在搜索或其他算法中作为收集 true 和 false 的工具

<<左移  (shl)
a << b  = a * ( 2 ^ b )                     // 注 : 这里指2的b次方, 下同
即把a的二进制表示数后添加b个0
常用 1 << x 来表示 2 的 x 次方

>>右移  (shr)
a >> b = int( a / (2 ^ b ) )
即把a的二进制表示数后硬生生除去b位

以上两种移位的运算可以用于各种二分、树上倍增(其他倍增也可以)、堆的运算等等
比普通的乘法、除法、取模要快很多
在优化程序时可以考虑

即把a的二进制表示数后添加b个0

猜你喜欢

转载自blog.csdn.net/CH_Vaniteux/article/details/79271324