在我给出的一次采访中提到了这一点.我无法正确回答这个问题.
我想知道根据数字启用了多少位.
假设,如果数字是2,我应该返回3.如果数字是3,我应该返回7
8 4 2 1
1 1
8 4 2 1
1 1 1
Run Code Online (Sandbox Code Playgroud)
这有什么简单的方法吗?
是的,有:从2的相应幂减去1,如下所示:
int allBitsSet = (1U << n) - 1;
Run Code Online (Sandbox Code Playgroud)
该表达式(1U << n) - 1计算2权力的值,该值n始终具有二进制形式:
1000...00
Run Code Online (Sandbox Code Playgroud)
即一个n零后跟零.当你1从那个形式的数量中减去时,你从设置1为零的位"借用" ,并将剩余的位翻转到1.
您可以通过解决十进制系统中的类似问题来形象化这一点:"创建一个有n九个数字的数字".解决方案是相同的,除了现在你需要使用10而不是2.
| 归档时间: |
|
| 查看次数: |
137 次 |
| 最近记录: |