位運算 用法彙總

2021-10-07 15:58:54 字數 567 閱讀 8326

比如給定陣列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位...