Bit Manipulation
这个帖子讲得非常好!
基本操作总结
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
orA & ~(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