任何想法如何在C ++中针对uint64_t整数执行此操作。经过一番研究,我发现我需要将带有掩码的整数与该位设置为1。
因此,如果我想从右数起第50位,我应该加上2 ^ 50。
任何想法都如何设置特定位。我认为如果使用指数,这将是一项昂贵的操作。
答案 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年历史了。