Bit Manipulation
这个帖子讲得非常好!
基本操作总结
Set union
A | BSet intersection
A & BSet subtraction
A & ~BSet negation
ALL_BITS ^ Aor~ASet bit
A |= 1 << bitClear bit
A &= ~(1 << bit)Test bit
(A & 1 << bit) != 0Extract last bit
A &-AorA & ~(A - 1)orx ^ (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?