在我给出的一次采访中提到了这一点。我无法正确回答这个问题。
我想知道根据数字启用了多少位。
假设,如果数字是2,我应该返回3。 如果数字是3,我应该返回7
8 4 2 1
1 1
8 4 2 1
1 1 1
有没有简单的方法呢?
答案 0 :(得分:5)
是的,有:从2的相应幂中减去1,如下所示:
int allBitsSet = (1U << n) - 1;
表达式(1U << n) - 1
将2
的值计算为n
的幂,该值始终具有二进制形式:
1000...00
即。一个后跟n
个零。当您从该表单的数字中减去1
时,您从设置为1
的位“借用”使其为零,并将剩余的位翻转为1
。
您可以通过解决十进制系统中的类似问题来形象化:“创建一个具有n
nines的数字”。解决方案是相同的,除了现在你需要使用10而不是2。