GCC和Clang-使用内在函数查找Word中的第一个置位

时间:2019-01-29 10:44:08

标签: c++ gcc clang

我试图在机器字中找到第一个置位位。以下摘录来自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一起使用可获得正确的结果,但带有警告。有什么办法可以解决?

0 个答案:

没有答案