算法心得

X = X and (X-1) 目的是去除最右边的为1的位元
X = X or (x+1) 目的是让最右边为0的位元变成1
X = X and (X+1) 目的让最右边相邻为1的位元全部变成0
X = X or (x-1) 目的让最右边相邻为0的位元全部变成1

X = (not X) and (x+1) 目的是右边的位元0变成1, 然后其余位变成0
X = (not X) or (x-1) 这个是右边为1的位元变0, 然后其余位变成1


下面的公式 可以让右边相邻的为0的位元变成1, 其余位设置成0.
X = (not X) and (X-1)
X = not (x or -x)
X = (x and -x) -1

下面的公式 可以让右边相邻的为1的位元变成0, 并将其余位设置成1
X = (not X) or (x+1)

X = X and (-X) 保留最右边为1的位元, 其余都设置为0
X = X xor (x-1) 保留最右边为1的位元, 并将该位元最右边为0的位元都变成1, 靠其左边的位元都设置为0
X = X xor (x+1) 保留最右边为0的位元, 将其右边的所有位元设置1, 左边的所有位元设置为0

下面的公式将最右边相邻的为1的位元设置成0
x = ((x or (x -1)) + 1) and x
x = ((x and -x) + x) and x

德摩根定律:
not (x and y) = (not x) or (not y)
not (x or y) = (not x) and (not y)
not (x + 1) = not x - 1
not (x - 1) = not x + 1
not (-x) = x - 1
not (x xor y) = (not x) xor y
not (x + y) = not x - y
not (x - y) = not x + y

原文地址:https://www.cnblogs.com/RyanHuang/p/3643123.html