c++ - 取消设置最右边的设置位

标签 c++ c algorithm math bit-manipulation

<分区>

Possible Duplicates:
How do you set, clear and toggle a single bit in C?
Removing lowest order bit

n 是一个正整数。如何取消其最右边的设置位?

假设 n= 7 => n = 0111。 我想要 0110 作为输出。是否有任何简单的按位黑客来实现目标?

最佳答案

尝试 n & (n-1) 其中 &bitwise AND

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!)

关于c++ - 取消设置最右边的设置位,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4703964/

相关文章:

algorithm - 在给定时间范围内查找多重集的模式(最大多样性)

c++ - 每帧多次调用 glBufferSubData

c++ - 没有内部作用域的 if 语句?

c++ - 如何在 C++ 中重用字符串流?

c - Memcpy 拷贝比预期多

algorithm - 如何证明 Θ(g(n)) = O(g(n)) ∩ Ω(g(n))

c++ - 在不使用交换的情况下分配最大缓冲区

c++ - 从父进程到子进程的网络摄像头流

Python 从 C 运行 main python multiprocess

c - 围栏密码算法c