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
。
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
。