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

C++ gcc _builtin function gives unexpected answer

Int64_t n=7; 在打印 __builtin_clz(n) 后答案是 29 而不是预期的答案 61

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

Built-in Function: int __builtin_clz (unsigned int x)

n 被隐式转换为 unsigned int 因为这是函数所采用的。

如果您需要更多位,还有 int __builtin_clzll (unsigned long long)

这是您正在使用的内部函数的签名:

int __builtin_clz (unsigned int x)

如您所见,它适用于 32 位无符号。它将您的 64 位整数视为 32 位整数。由于 7 有 4 位设置 return 32-3 = 29

试试 __builtin_clzl;__builtin_clzll

details here