c – 用于计数位的高效按位运算或找到最右侧的位
发布时间:2020-12-16 10:53:00 所属栏目:百科 来源:网络整理
导读:给定unsigned int,我必须执行以下操作: 计算设置为1的位数 找到最左边1位的索引 找到最右边1位的索引 (该操作不应该是架构依赖). 我已经使用按位移位完成了这个,但我必须迭代几乎所有的位(es.32). 例如,计算1: unsigned int number= ...;while(number != 0
给定unsigned int,我必须执行以下操作:
>计算设置为1的位数 (该操作不应该是架构依赖). 我已经使用按位移位完成了这个,但我必须迭代几乎所有的位(es.32). unsigned int number= ...; while(number != 0){ if ((number & 0x01) != 0) ++count; number >>=1; } 其他操作类似. 所以我的问题是:有没有更快的方法呢? 解决方法
如果您想要最快的方式,则需要使用非便携式方法.
在Windows / MSVC: > _BitScanForward() GCC: > __builtin_ffs() 这些通常直接映射到本机硬件指令.所以它没有比这些快得多. 但由于它们没有C/C++功能,因此只能通过编译器内在函数访问它们. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |