我试图在机器字中找到第一个置位位。以下摘录来自GCC中的bitset
实现,我对其进行了修改,以掩盖我要跳过的前x位。
// mask off bits below bound
__thisword &= (~static_cast<_WordT>(0)) << _S_whichbit(__start_from);
auto index = __builtin_ffs(__thisword);
问题是如果有两折。
Google上的文档中有一半说__builtin_ffs
占了unsigned int
,而另一半却说了int
。我使用的GCC版本期望使用int
。
如果我将int
用作_WordT
,这将导致我的第二个问题,这将在左移期间导致不确定的行为。如果我将unsigned int
用作类型,则会收到符号更改错误,因为__builtin_ffs
期望有int
。
将左移与int
一起使用可获得正确的结果,但带有警告。有什么办法可以解决?