如何确定在unsigned int64中设置了哪个位

Sve*_*sli 5 delphi bit-manipulation

我有一个变量vBit,它是一个无符号的int64.我知道只有一个位设置,我需要弄清楚它是哪一个.目前我这样做(在Delphi中):

vPos := -1;
repeat
  vBit := vBit shr 1;
  inc(vPos);
until vBit = 0;
Run Code Online (Sandbox Code Playgroud)

有更快的方法吗?所有位位置都是相同的,因此平均而言算法需要迭代32次.我正在寻找与ands和xors以及诸如此类的优雅技巧.

Bob*_*ore 8

查找第一个位集与计算零位相同,因此这个hack可能有所帮助.顺便说一下,这是一个非常有用的书签页面.

  • 或者"在O(lg(N))操作中查找N位整数的对数库2":http://www-graphics.stanford.edu/~seander/bithacks.html#IntegerLog (2认同)