1. 程式人生 > >【基礎】c++位運算

【基礎】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