获取前2个连续1位的索引的有效方法

问题描述 投票:0回答:1

我有这个二进制表示:

0b0110010

对于 gcc,有一个内置函数

__builtin_ffs
,它将返回 1 加最低有效 1 位的索引,在我的示例中返回 2。

我正在寻找一种有效的方法来返回 2 个连续 1 位的索引,在我的示例中为 5。 语言是 C,我有 64 位数字 * 1024 需要检查。如果解决方案也能涵盖 N 个连续位的情况,那就太好了。

简单的解决方案是通过右移操作迭代位并使用掩码,但效率不高。

c performance optimization bit-manipulation
1个回答
0
投票

由于 gcc 已经内置了,一种方法是将数字左移一位,与原始数字按位

and
,然后将工作转发到
__builtin_ffs
,即

__builtin_ffs((x << 1) & x)

请注意,这使用编译器内部函数,并且根据定义不可移植。

© www.soinside.com 2019 - 2024. All rights reserved.