gpt4 book ai didi

c++ - 如何从 unsigned long long 掩码中获取数字?

转载 作者:可可西里 更新时间:2023-11-01 17:04:10 25 4
gpt4 key购买 nike

我想知道如何反转像 this 这样的东西.所以有一个 mask其中 auto mask = 1ULL << 20;如何获得 20从面具出来?

最佳答案

无循环

很多年前,当我为国际象棋引擎编写按位算法时,我发现了一个快速实现,它对您的要求很有用,它是无循环的。此方法将返回第一个 1 位从右到左(最低有效位)的位置:

inline unsigned int lsb(unsigned long long value)
{
if (!value)
return -1;

value &= -value;
unsigned int lsb = (unsigned) value | (unsigned) (value >> 32);
return (((((((((((unsigned) (value >> 32) != 0) << 1)
+ ((lsb & 0xffff0000) != 0)) << 1)
+ ((lsb & 0xff00ff00) != 0)) << 1)
+ ((lsb & 0xf0f0f0f0) != 0)) << 1)
+ ((lsb & 0xcccccccc) != 0)) << 1)
+ ((lsb & 0xaaaaaaaa) != 0);
}

int main()
{
unsigned long long x = 1ULL<<20;
cout << lsb(x) << endl;
}

输出

20

我想,我找到了here .

关于c++ - 如何从 unsigned long long 掩码中获取数字?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16140483/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com