Edw*_*ton 8 c c++ algorithm math bit-manipulation
可能重复:
如何在C中设置,清除和切换单个位?
删除最低位
n是一个正整数.如何解除最右边的设置位?
Say n= 7=> n = 0111.我想0110作为输出.是否有任何简单的按位攻击来实现目标?
Pra*_*rav 18
试试n & (n-1)这里&是按位与
n = 7
n - 1 =6
n & (n-1)=> 0 1 1 1   (7)
          & 0 1 1 0   (6)
           --------- 
            0 1 1 0  (done!)
编辑(回应Forest提供的评论)
n = 6 
n - 1 = 5
n & (n-1)=> 0 1 1 0   (6)
          & 0 1 0 1   (5)
           --------- 
            0 1 0 0  (done!)
你的问题不清楚。
如果您只想取消设置位 0,这里有一些方法(根据您所涉及的类型,行为略有不同):
x &= -2;
x &= ~1;
x -= (x&1);
如果您想取消设置已设置位中的最低位,可以使用以下一些方法:
x &= x-1;
x -= (x&-x);
请注意x&-x等于 的最低位x,至少当x为无符号或二进制补码时。如果您想要执行任何像这样的位算术,则应该仅使用无符号类型,因为有符号类型在按位运算下具有实现定义的行为。