Bit manipulation は AND、OR、XOR、NOT、シフトを使用して整数の二進数表現を直接操作します。コンパクト、分岐なし、非常に高速な操作を実現します。
基本操作
python
x & 1
x <<
x >>
x & ( << k)
x | ( << k)
x & ~( << k)
x ^ ( << k)
Bit manipulation は AND、OR、XOR、NOT、シフトを使用して整数の二進数表現を直接操作します。コンパクト、分岐なし、非常に高速な操作を実現します。
x & 1
x <<
x >>
x & ( << k)
x | ( << k)
x & ~( << k)
x ^ ( << k)
x & (x - 1) # clears the lowest set bit
x & (x - 1) == 0 # is x a power of two? (x>0)
x & (-x) # isolates the lowest set bit
bin(x).count('1') # popcount (number of set bits)
def single_number(nums):
result = 0
for n in nums:
result ^= n # pairs cancel: a ^ a == 0
return result # the lone unpaired value remains
single_number([4, 1, 2, 1, 2]) # -> 4
ビット操作は O(1) です。上記の XOR スキャンは O(n) 時間、O(1) 空間 です。
bitmask (部分集合列挙、状態に対する DP)、フラグ、高速算術、低レベル/組み込みコードに使用します。符号ビット、言語固有のシフト動作、可読性に注意してください — 明らかでないトリックはコメントしてください。
ビット操作は XOR 単一数トリックのような優雅な O(1) 空間ソリューションを生み出し、インタビューで驚かせることができます。
Bitmask DP は多くの組合せ状態空間問題を扱いやすくします。
システム、グラフィックス、圧縮、および各サイクルが重要なパフォーマンスクリティカルなコードで不可欠です。
ジュニアからシニアまで、詳細な回答付きのIT面接質問ライブラリ。
寄付する