c – 用于计数位的高效按位运算或找到最右侧的位

c – 用于计数位的高效按位运算或找到最右侧的位,第1张

概述给定unsigned int,我必须执行以下 *** 作: >计算设置为1的位数 >找到最左边1位的索引 >找到最右边1位的索引 (该 *** 作不应该是架构依赖). 我已经使用按位移位完成了这个,但我必须迭代几乎所有的位(es.32). 例如,计算1: unsigned int number= ...;while(number != 0){ if ((number & 0x01) != 0) 给定unsigned int,我必须执行以下 *** 作:

>计算设置为1的位数
>找到最左边1位的索引
>找到最右边1位的索引

(该 *** 作不应该是架构依赖).

我已经使用按位移位完成了这个,但我必须迭代几乎所有的位(es.32).
例如,计算1:

unsigned int number= ...;while(number != 0){    if ((number & 0x01) != 0)        ++count;    number >>=1;}

其他 *** 作类似.

所以我的问题是:有没有更快的方法呢?

解决方法 如果您想要最快的方式,则需要使用非便携式方法.

在windows / MSVC:

> _BitScanForward()
> _BitScanReverse()
> __popcnt()

GCC:

> __builtin_ffs()
> __builtin_ctz()
> __builtin_clz()
> __builtin_popcount()

这些通常直接映射到本机硬件指令.所以它没有比这些快得多.

但由于它们没有C/C++功能,因此只能通过编译器内在函数访问它们.

总结

以上是内存溢出为你收集整理的c – 用于计数位高效按位运算或找到最右侧的位全部内容,希望文章能够帮你解决c – 用于计数位的高效按位运算或找到最右侧的位所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://www.outofmemory.cn/langs/1223544.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-05
下一篇 2022-06-05

发表评论

登录后才能评论

评论列表(0条)

保存