我有一个位板,如果只有一位设置为1,我想检查C.
#include <stdint.h>
typedef uint64_t bboard;
bboard b = 0x0000000000000010;
if (only_one_bit_set_to_one (b)) // in this example expected true
// do something...
Run Code Online (Sandbox Code Playgroud)
有没有想过写这个功能int only_one_bit_set_to_one (bboard b)?
Dan*_*her 52
当然,这很简单:
int only_one_bit_set_to_one (bboard b)
{
return b && !(b & (b-1));
}
Run Code Online (Sandbox Code Playgroud)
假设b有任何位设置,最不重要的是位数k.然后b-1具有与b上面的索引相同的位k,0位到位k以及在较低有效位置的1位,因此按位并从中移除最低有效位集b.如果b只设置了一个位,则结果变为0,如果b设置了更多位,则结果为非零.
| 归档时间: |
|
| 查看次数: |
11493 次 |
| 最近记录: |