比如給定陣列a = [a0, a1, a2, a3, a4]。為了表示從陣列a中選擇任意個元素的組合狀態。組合總和為2的n次方。可以通過位運算達成。
設 bits = 1 << len(a).用bits中的每i位來代表a[i]是否已選。bits的每乙個不同的值代表了一種組合。
這個在求線性列表的組合數裡面非常有用。也可以用bits來表示具體的選擇狀態。參見leetcode 698. 劃分為k個相等的子集 官方題解的動態規劃演算法。就是用到了bits來表達選擇狀態。
x & (x - 1)
x | (x+1)
即-n操作
~n + 1
lowbit操作取最後一位1及後面的0的值
lowbit(n) = n & (-n)
若有字母a.則轉換a的大小寫可用異或運算
即 a = a ^ (1 << 5)
原因是異或運算等價於不進製加法
總體來說,a ^ b 等價於不進製的二進位制按位相加的結果。因此有:
n ^ n = 0
n ^ 0 = n
n ^ 0xf: 將最後四位取反
位運算題目彙總
給你乙個整數陣列 arr 請你將陣列中的元素按照其二進位制表示中數字 1 的數目公升序排序。如果存在多個數字二進位制中 1 的數目相同,則必須將它們按照數值大小公升序排列。請你返回排序後的陣列。輸入 arr 0 1,2 3,4 5,6 7,8 輸出 0,1,2,4,8,3,5,6,7 解釋 0 是唯...
位運算用法總結
位運算 對每個二進位制位進行操作 程式中的所有數在計算機記憶體中都是以二進位制的形式 儲存的。位運算說穿了,就是直接對整數在記憶體中的二進位制位進行 操作。比如,and運算本來是乙個邏輯 運算子,但整數與整數之間也可以進行and運算。舉個例子,6的二進位制是110,11的二進位制是1011,那麼6 ...
位運算的神奇用法
按位與如果兩個相應的二進位制位都為1,則該位的結果值為1,否則為0 按位或兩個相應的二進位制位中只要有乙個為1,該位的結果值為1 按位異或 若參加運算的兩個二進位制位值相同則為0,否則為1 取反 是一元運算子,用來對乙個二進位制數按位取反,即將0變1,將1 左移用來將乙個數的各二進位制位全部左移n位...