C ++ gcc _builtin函数给出了意想不到的答案

时间:2017-07-25 12:43:55

标签: gcc c++14 built-in

打印Int64_t n=7;答案后的

__builtin_clz(n)29而非预期答案61

2 个答案:

答案 0 :(得分:4)

https://gcc.gnu.org/onlinedocs/gcc/Other-Builtins.html州:

  

内置函数:which pip >pip: aliased to noglob pip

即。 int __builtin_clz (unsigned int x)被隐式转换为n,因为这就是函数所需要的。

如果您需要更多位,还有unsigned int

答案 1 :(得分:3)

这是你正在使用的内在的签名:

int __builtin_clz (unsigned int x)

正如您所看到的,它适用于32位无符号。它将您的64位整数视为32位整数。由于7设置了4位,因此返回32-3 = 29

请尝试__builtin_clzl;__builtin_clzll

details here