从64位整数一一提取位

时间:2018-11-13 19:30:40

标签: c++ bit-manipulation

任何想法如何在C ++中针对uint64_t整数执行此操作。经过一番研究,我发现我需要将带有掩码的整数与该位设置为1。

因此,如果我想从右数起第50位,我应该加上2 ^ 50。

任何想法都如何设置特定位。我认为如果使用指数,这将是一项昂贵的操作。

2 个答案:

答案 0 :(得分:1)

查找位移运算符:<<>>。您至少可以通过两种方式做到这一点:

  • value&(uint64_t(1)<<50):给出0或2 50
  • (value>>50)&1:给出0或1

答案 1 :(得分:0)

自Intel 386以来,该硬件已经可以使用数十年了。为此,有专门的说明,BSF查找第一置位,BSR查找最后一位。

如果您使用的是Windows且使用的是Visual C ++,则要将这些指令用于uint64_t整数,请参见_BitScanForward64_BitScanReverse64编译器内在函数。

其他编译器/平台不同,但它们可能暴露出相似的东西,英特尔386已有33年历史了。