gpt4 book ai didi

c++ - 按 block 比较和计数位

转载 作者:搜寻专家 更新时间:2023-10-31 00:57:43 25 4
gpt4 key购买 nike

我有一个非常具体的问题,我想听听您的意见:

给定一个 32 位整数,我想知道有多少个 2 位 block 小于或等于 00、01 或 10。我知道 2 位模式我在编译时比较整数。

00 01 10 11 01 11 00 10 ... // 4 blocks <= 01

到目前为止,我正在使用 if-constructs 并创建一个应用于整数并调用 __builtin_popcount() 的位掩码.这是一个关于如何检查 word 的例子对于 <= 01在 32 位整数上。

__builtin_popcount(~(word | 0x55555555))

不幸的是,这些案例区分(总共 3 个)花费了大量时间,我想加快速度。迭代整数并逐 block 比较可能是一个更糟糕的主意。我有机会进一步改进它吗?

最佳答案

将所有 2 位位掩码存储在一个数组中。缓存 32 位整数。

对于 32 位整数的每个 2 位 block :

将缓存的整数恢复为临时整数。

<< 清除较高有效位,然后位移 >> 30 位,这样您想要检查的位就是寄存器中的两个最低有效位。

对于每个掩码,按位与。将结果缓存到先前分配的数组的某个子集。

循环,根据需要更改位移以获得不同的掩码。

在第一次迭代中,<< 30 位,>> 30 位。在第二次迭代中,<< 28 位,>> 30 位。

关于c++ - 按 block 比较和计数位,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36896837/

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