gpt4 book ai didi

php - 提取位标志的最有效方法

转载 作者:可可西里 更新时间:2023-10-31 23:05:23 24 4
gpt4 key购买 nike

我有这些可能的位标志。

1, 2, 4, 8, 16, 64, 128, 256, 512, 2048, 4096, 16384, 32768, 65536

所以每个数字就像服务器端的真/假语句。因此,如果前 3 项,并且只有前 3 项在服务器端被标记为“真”,则 Web 服务将返回 7。或者如果以上所有 14 项都为真,我仍然会从Web 服务是所有这些数字的总和。

处理我返回的数字以找出哪些项目被标记为“真实”的最佳方法是什么?

最佳答案

使用位掩码运算符。在 C 语言中:

 X & 8

如果设置了“8”位,则为真。

您可以枚举位掩码,并计算设置了多少。

如果真的是整个字都包含位,而你想简单地计算设置了多少位,本质上你想要一个“人口计数”。绝对的获得人口计数的最快方法通常是执行 native “popcnt”在您机器的指令集中可用。

如果您不关心空间,您可以设置一个数组countedbits[...] 并根据您的值和预先计算的位数进行索引。然后单次内存访问计算您的位数。

常用的就是普通"bit twiddling code"计算位数:

(凯尼根法):

unsigned int v; // count the number of bits set in v
unsigned int c; // c accumulates the total bits set in v
for (c = 0; v; c++)
{
v &= v - 1; // clear the least significant bit set
}

(并行位求和,32位)

v = v - ((v >> 1) & 0x55555555);                    // reuse input as temporary
v = (v & 0x33333333) + ((v >> 2) & 0x33333333); // temp
c = ((v + (v >> 4) & 0xF0F0F0F) * 0x1010101) >> 24; // count

如果您以前从未见过这些有点乱七八糟的黑客,那么您将大饱口福。

PHP 很有趣,可能会用其中的一些算法做一些有趣的事情。

关于php - 提取位标志的最有效方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2791869/

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