位運算是在二進制的基礎上所運行的html
主要分爲六種運算符:數組
1、&(按位與):spa
一、概念:3d
如有 a & b = chtm
將 a 和 b 轉換爲二進制,並將其每二進制位一 一對應blog
若相同位數均爲 1 時, c 中對應位數爲 1;get
不然爲 0 。博客
二、例子:it
若存在 9 & 5io
9 的二進制爲(00 001 001),5的二進制爲(00 000 101)
那麼 9 & 5 = 1(00 000 001)
三、圖解:
2、|(按位或):
一、概念:
如有 a | b = c
將 a 和 b 轉換爲二進制,並將其每二進制位一 一對應
若相同位數只要有至少一個 1 時, c 中對應位數爲 1;
不然爲 0 。
二、例子:
若存在 9 | 5
9 的二進制爲(00 001 001),5的二進制爲(00 000 101)
那麼 9 | 5 = 13( 00 001 101)
三、圖解:
3、^(按位異或):
一、概念:
如有 a ^ b = c
將 a 和 b 轉換爲二進制,並將其每二進制位一 一對應
若相同位數上的數字不相同時, c 中對應位數爲 1;
不然爲 0 。
二、例子:
若存在 9 ^ 5
9 的二進制爲(00 001 001),5的二進制爲(00 000 101)
那麼 9 ^ 5 = 12( 00 001 100)
三、圖解:
4、~(取反):
一、概念:
如有 ~ a = b
將 a 轉換爲二進制
並將其每二進制上的數字轉換, 0 轉換成 1;
1 轉換成 0,存到 b 中一 一對應 。
二、例子:
若存在 ~ 9
9 的二進制爲(00 001 001)
那麼 ~ 9 = 246( 11 110 110)
三、圖解:
5、<<(左移):
一、概念:
如有 a << b = c
將 a 轉換爲二進制
並將其每二進制上的數字向左移 b 位, 高位丟棄;
低位補 0 ,存到 c 中一 一對應。
二、例子:
若存在 9 << 5
9 的二進制爲(00 001 001)
那麼 9 << 5 = 32(00 100 000)
三、圖解:
(每一位向左移 5 位)
6、>>(右移):
一、概念:
如有 a >> b = c
將 a 轉換爲二進制
並將其每二進制上的數字向右移 b 位, 高位補 0;
低位丟棄 ,存到 c 中一 一對應。
二、例子:
若存在 9 >> 3
9 的二進制爲(00 001 001)
那麼 9 >> 3 = 1(00 000 001)
三、圖解:
(每一位向右移3位)
PS:
一、對於有符號數(好比負數),在右移時,符號將一塊兒移動。
二、當被右移運算的有符號數是正數時,最高位補 0,爲負數時,最高位補 1 。
位運算的一些有用知識:
下面是由江蘇省淮陰中學薛志堅整理的一些常見操做:(來源於一個dalao的博客)
窩 jiao 得頗有用,整理下來用博客存上
再加一條:
求 lowbit:n & -n(樹狀數組)
來自深受 dp 毒害的瑟瑟發抖的小可憐的控訴
我討厭 dp