-3

这是在我接受的一次采访中提出的。我无法正确回答这个问题。

我想根据一个数字找出启用了多少位。

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

8 4 2 1 

    1 1 

8 4 2 1

  1 1 1

有什么简单的方法吗?

4

1 回答 1

5

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

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

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

1000...00

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

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

于 2013-10-23T17:10:51.027 回答