测试位板是否只有一位设置为1

Pio*_*ioz 17 c bitboard

我有一个位板,如果只有一位设置为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设置了更多位,则结果为非零.

  • 啊,旧的"是两个力量"的算法 (3认同)