`

对于一个整数大小的bit数组中的非0 位统计的方法--bitcount [转]

 
阅读更多

对于bit数组中非0位个数统计的方法,请看以下文章

popcount 算法分析

http://www.cnblogs.com/Martinium/archive/2013/03/01/popcount.html

 

该方法的局限在于如果bit位超过64位则无法处理,仅用于unsigned int 的位计算。

如果对超过64/32bit的bit数组进行统计,则将bit区域按照sizeof(int)来切分,依次进行统计。

 

该文中提及到了 9中方法,

  1. iterated_popcnt  (采用对每位进行移位来统计,效率低下)
  2. sparse_popcnt     (采用数学特性进行处理,n&(n-1) 的方法来依次判断1的个数!循环次数=n中位为1的个数)
  3. dense_popcnt      (sparse_popcnt的变种。当提前知道1的个数较多,可以采用取反的操作,减少1的个数,从而采用sparse_popcnt来提供效率)
  4. lookup_popcnt      (该方法以空间换取时间的。将4字节的整数分为4个1字节char来看待,将256种char的bit1数目保存到表中,当计算n的位为1时,分为4个char,依次从表中直接读取1的位数,然后相加获取4字节空间中位为1的总数目)
  5. parallel_popcnt     (不好说清,大家看来源文章)
  6. nifty_popcnt           (不好说清,大家看来源文章)
  7. hacker_popcnt        (不好说清,大家看来源文章)
  8. hakmem_popcnt     (不好说清,大家看来源文章)
  9. assembly_popcnt     (根据处理支持的popcount指令直接计算)
分享到:
评论

相关推荐

    编程实现输入一个整数,显示它的位数,并显示它的各位数字,及其各位数字的和

    在设计界面中,添加一个TLabel用于显示提示信息,一个TEdit用于用户输入整数,一个TButton用于触发计算,以及两个其他TLabels用于显示位数和数字之和。 2. 处理用户输入:在TButton的OnClick事件中,我们将编写代码...

    4应用 3:节衣缩食 —— 位图(1).md

    - `bitop`:对一个或多个保存二进制位的字符串key进行位运算。 #### 实际操作示例 - 使用Python获取字符串字符的ASCII码,并转换为二进制表示。 - 使用Redis-cli命令行工具进行位操作,演示了如何逐步构建字符串...

    FFT中用到的倒序算法

    例如,在一个长度为8(即2^3)的数组中,第5个元素(索引为4,二进制表示为100)在经过倒序后变为第2个元素(索引为1,二进制表示为010)。 倒序算法的核心在于如何快速地进行二进制位的反转操作。通常情况下,可以...

    bmp 位图转换(可将24 位t转为16 / 8 / 4 位)

    封装的一个将24BitCount 的bmp 转换为16bitCount 或8bitcount 或4Bitcount类。并保存。此接口只需要输入要转换图片的路径就可以获得转换后图片的bitmap。此接口在兼容各种平台

    剑指offer中68道例题程序+思路讲解+题目说明.zip

    - **求整数的二进制表示中1的个数**:位运算统计二进制中1的个数,如BitCount、HammingWeight等方法。 这些知识点涵盖了数据结构、算法设计、问题解决策略等多个方面,通过深入学习和实践,不仅能提升编程能力,也...

    BitCounting:快速研究三种计数位数的方法

    第一个实现如下: uint8_t count_bits ( uint32_t n) { uint8_t counter = 0 ; for ( ; n; n>>= 1 ) if (n & 1 ) ++counter; return counter; } 事实证明,这比未排序的数组处理排序的数组要快得多。 ...

    利用JAVA,求数字特征值。

    然而,在这个上下文中,特征值可能是指更广泛的数学或编程概念,如数字的质因数分解、模运算性质、位操作、数字的统计特性(如平均值、中位数、众数)或其他自定义计算。 在Java中,我们可以通过多种方式求取数字...

    Bitcount & 按位汉明距离:计算向量中的集合位,并计算向量集合之间的按位汉明距离-matlab开发

    此提交提供两个功能: Bitcount - 计算输入数组的每一列中设置的位数,类型转换为位向量。 Bitwise_hamming - 给定两组位向量(每列是一个位向量),计算两组之间所有向量对之间的汉明距离。 后者功能需要前者,但...

    第32讲 系统函数.pdf

    在编程领域,系统函数是操作系统或编程环境中提供...以上这些系统函数构成了一个强大的工具箱,允许开发者高效地处理各种编程任务,提高代码的可读性和可维护性。熟练掌握这些函数对于提升编程效率和解决问题至关重要。

    算法-数1的个数(信息学奥赛一本通-T1095).rar

    3. **库函数法**:某些编程语言如C++的`std::bitset`或者Java的`Integer.bitCount()`提供了内置函数,可以直接计算一个整数的二进制表示中1的个数,非常方便,但需要了解和记住这些库函数。 4. **人口普查位法...

    bmp格式图片的显示

    例如,对于4位BMP,每个像素的颜色可以通过一个0-15的整数表示,而在8位BMP中,这个范围是0-255。在显示时,MFC的CImage类会自动处理这些转换,但如果需要自定义处理,就需要手动进行颜色查找表(Color Look-Up ...

    华为OD机试C卷- 找数字(Java & JS & Python & C).md-私信看全套OD代码及解析

    2. 从最低位开始,找到最右边的一个`1`,将它变为`0`。 3. 再次从刚才的位置向右,找到第一个`0`,将其变为`1`。 4. 如果整个二进制串都是`1`(即`n`本身已经是全`1`的情况),则在`n`的二进制表示最左边加一个`1`。...

    打开24位BMP

    对于每个像素,我们从imageData数组中提取RGB值,并将其设置为控件的相应像素颜色: ```vb Dim x As Integer, y As Integer For y = 0 To bmpHeader.ImageHeight - 1 For x = 0 To bmpHeader.ImageWidth - 1 Dim ...

    位图结构介绍

    通过上述分析,我们可以看到位图文件格式是一个结构化的数据格式,它不仅可以用于存储图像数据,还可以通过不同的信息头来描述图像的各种属性。位图文件格式的设计考虑到了各种操作系统的兼容性,并且提供了多种压缩...

    redis 宝典

    Redis中的键是用于唯一标识一个数据项的字符串。以下是一些关于键操作的重要命令: - **DEL**:删除一个或多个键。 - **DUMP**:序列化给定键,并返回被序列化的值。 - **EXISTS**:判断给定键是否存在于数据库中。...

    利用Redis统计网站在线活跃用户的方法

    Bitmaps允许我们在一个字符串的每个位上设置值,通常用来表示一个特定状态,比如用户是否在线。 描述中提到,通过将用户的ID映射到Bitmap的特定位,可以使用单个Redis value来存储所有活跃用户的信息。当用户在线时...

    java代码-找到为1 的索引位置 从右往左

    这个操作在位运算和数据处理中有着广泛的应用,比如在查找数组中第一个非零元素、计算掩码或者进行特定的逻辑判断时。下面我们将详细探讨这个问题,并通过一个具体的Java代码示例来阐述解决方案。 首先,我们要明确...

Global site tag (gtag.js) - Google Analytics