【发布时间】:2017-07-25 12:43:54
【问题描述】:
Int64_t n=7; 打印后__builtin_clz(n) 的答案是29,而不是预期的答案61。
【问题讨论】:
-
什么是
Int64_t? -
那是
int64_t。Int64_t是什么? -
抱歉,只是输入错误。
Int64_t n=7; 打印后__builtin_clz(n) 的答案是29,而不是预期的答案61。
【问题讨论】:
Int64_t?
int64_t。 Int64_t 是什么?
https://gcc.gnu.org/onlinedocs/gcc/Other-Builtins.html 状态:
内置函数:
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 位,因此它返回 32-3 = 29
改用__builtin_clzl; 或__builtin_clzll。
【讨论】: