>计算设置为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 – 用于计数位的高效按位运算或找到最右侧的位所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)