如何找出启用的位数:位处理

时间:2013-10-23 17:07:08

标签: c

在我给出的一次采访中提到了这一点。我无法正确回答这个问题。

我想知道根据数字启用了多少位。

假设,如果数字是2,我应该返回3。           如果数字是3,我应该返回7

8 4 2 1 

    1 1 

8 4 2 1

  1 1 1

有没有简单的方法呢?

1 个答案:

答案 0 :(得分:5)

是的,有:从2的相应幂中减去1,如下所示:

int allBitsSet = (1U << n) - 1;

表达式(1U << n) - 12的值计算为n的幂,该值始终具有二进制形式:

1000...00

即。一个后跟n个零。当您从该表单的数字中减去1时,您从设置为1的位“借用”使其为零,并将剩余的位翻转为1

您可以通过解决十进制系统中的类似问题来形象化:“创建一个具有n nines的数字”。解决方案是相同的,除了现在你需要使用10而不是2。