Int64_t n=7;
答案后的 __builtin_clz(n)
是29
而非预期答案61
。
答案 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
。