Bit Manipulation

https://discuss.leetcode.com/topic/50315/a-summary-how-to-use-bit-manipulation-to-solve-problems-easily-and-efficiently

  • 这个帖子讲得非常好!

基本操作总结

  • Set union A | B

  • Set intersection A & B

  • Set subtraction A & ~B

  • Set negation ALL_BITS ^ A or ~A

  • Set bit A |= 1 << bit

  • Clear bit A &= ~(1 << bit)

  • Test bit (A & 1 << bit) != 0

  • Extract last bit A &-A or A & ~(A - 1) or x ^ (x & (x-1))

  • Remove last bit A & (A-1)

  • Get all 1-bits ~0

XOR (^) tricks

  • XOR 主要用来剔除掉偶数个的相同元素,而生下来单独存在的元素

  • 特性:

(1) 恒等律:A ^ 0 = A

(2) 归零律: A ^ A = 0

相同的元素互相抵消;任何元素与 0 异或得到本身。

eg1: 不使用其他空间,交换两个值

eg2: Missing Number

Given an array containing n distinct numbers taken from 0, 1, 2, ..., n, find the one that is missing from the array. For example, Given nums = [0, 1, 3] return 2. (Of course, you can do this by math.)

AND (&) tricks

  • selecting certain bits

  • reverse the bits in integer

eg1: BITWISE AND OF NUMBERS RANGE

Get all 1-bits ~0eg2: NUMBER OF 1 BITS

OR (|) trick

  • Keep as many 1-bits as possible

eg1: Find Largest power of 2

Find the largest power of 2 (most significant bit in binary form), which is less than or equal to the given number N.

eg2: REVERSE BITS

Last updated

Was this helpful?