174得票13回答
正整数中快速计算非零位的方法

我需要一种在Python中快速计算整数中位数的方法。我目前的解决方案是:bin(n).count("1") 但我想知道是否有更快的方法来完成这个任务?

68得票7回答
Python中表示正整数所需的最小位数

1 = 0b1 -> 1 5 = 0b101 -> 3 10 = 0b1010 -> 4 100 = 0b1100100 -> 7 1000 = 0b1111101000 -> 10 … 如何获取整数的位数,即在Python中表示正整数所需的比特数?

14得票13回答
计算字节中设置的位数

我很感兴趣,想知道在这种情况下计算字节中设置的比特数的最佳方法是什么template< unsigned char byte > class BITS_SET { public: enum { B0 = (byte & 0x01) ? 1:0, ...

12得票3回答
__builtin_popcountll和_mm_popcnt_u64有什么区别?

我试图统计512MB内存中有多少个1,并发现了两种可能的方法,_mm_popcnt_u64() 和 __builtin_popcountll(),它们在gcc内置函数中。 _mm_popcnt_u64() 被称为使用 CPU 简介 SSE4.2,速度似乎是最快的,而 __builtin_po...

11得票2回答
计算位数:这行代码是如何工作的? n=n&(n-1);

我需要一些解释,说明这行代码是如何工作的。 我知道这个函数计算二进制中1的位数,但是这行代码如何清除最右边的1位呢?int f(int n) { int c; for (c = 0; n != 0; ++c) n = n & (n - 1); ...

9得票2回答
使用AVX-512或AVX-2计算大数据的1位数(种群计数)

我有一个很长的内存块,比如256 KiB或更长。我想计算整个块中1位的数量,换句话说:将所有字节的“种群计数”值相加。 我知道AVX-512有一个VPOPCNTDQ指令,它可以计算512位向量内每个连续64位中1位的数量,并且如果有适当的SIMD向量寄存器可用,则应该可以每个周期发出一个 -...

9得票4回答
如何得到一个2^k数的lg2值

如何获取已知为2的幂次方(2^k)的数字的底数为2的对数?(当然,我只知道值为2^k而不知道k本身。) 我想到的一种方法是先减去1,然后进行位计数: lg2(n) = bitcount( n - 1 ) = k, iff k is an integer 0b10000 - 1 = 0b01...