1011得票66回答
在一个32位整数中计算二进制位为1的数量

表示数字7的8位二进制数如下: 00000111 有三个二进制位被设置为1。 如何确定32位整数中设置位的数量所使用的算法?

90得票24回答
优雅地确定多个布尔值是否为“真”

我有一组五个布尔值。如果其中超过一个为true,我想执行特定函数。您能否想到最优雅的方式,使我能够在单个if()语句中检查此条件?目标语言是C#,但我也对其他语言的解决方案感兴趣(只要我们不谈论特定的内置函数)。 一个有趣的选项是将布尔值存储在字节中,进行右移并与原始字节比较。例如if(my...

29得票8回答
优化 Long.bitCount

我有一个程序,它调用了大量的Long.bitCount()函数,以至于其中一个CPU核心的33%的周期都被占用了。有没有一种比Sun JDK版本更快的实现方法? 我已经尝试过: - 这个算法(我认为这正是JDK的实现方式) - 不同大小的查找表,在28到222之间(每次查看几个位并将结果相...

23得票4回答
这个算法如何计算32位整数中设置位的数量?

int SWAR(unsigned int i) { i = i - ((i >> 1) & 0x55555555); i = (i & 0x33333333) + ((i >> 2) & 0x33333333); ret...

18得票8回答
在ARM汇编中,最快的方法是计算寄存器中1的数量。

所以我之前在一家知名的GPU公司面试时遇到了一个有关位操作的问题。尽管我是计算机体系结构的博士生,但对汇编语言了解甚少(这很奇怪),正如这个故事所表明的那样,我搞砸了。问题很简单: “编写一个快速的代码,用于计算32位寄存器中1的数量。” 现在我正在学习ARM汇编语言。因此,自然而然地,我...

16得票4回答
Java中Integer.bitCount的.NET等效方法是什么?

在.NET Framework中是否有类似于Java的Integer.bitCount(int)或Long.bitCount(long)的方法? (对于那些不熟悉这些Java方法的人,这也被称为:) 汉明重量 种群计数(当其在硬件中实现时通常称为POPCNT)。 虽然可以在网络上找到...

14得票3回答
如何生成一个SSE4.2的popcnt机器指令

使用C程序:int main(int argc , char** argv) { return __builtin_popcountll(0xf0f0f0f0f0f0f0f0); } 编译器命令行(gcc 4.4 - Intel Xeon L3426):gcc -msse4.2 po...

14得票10回答
如何在不转换为二进制的情况下检查汉明重量?

如何在不实际转换和计算的情况下获取一个数字的二进制表示中 “1”的数量? 例如: def number_of_ones(n): # do something # I want to MAKE this FASTER (computationally less comp...

14得票9回答
在Matlab中高效计算汉明重量

如何有效且简洁地计算MATLAB uint32解释为比特串后的非零比特位数?我有一个可行但效率较低的实现,需要循环遍历每个比特位。C++中使用std::bitset count()可以几乎瞬间完成计算。 我找到了一个列出各种比特位计数技巧的网页,但希望能有一种类似MATLAB的简单方法。 ...

13得票2回答
汉明重量索引

假设我们有一个整数 bitsize n=4; 我描述的问题是,如何根据 Hamming 权重和其值以及已知的 bitsize,将数字索引到数组位置。例如,对于 bitsize 为 4 的数组,可能长这样:|0|1|2|4|8|3|5|6|9|10|12|7|11|13|14|15| 元素按其汉...