我使用GCC提供的函数__builtin_clz
,它应该计算unsigned int
中前导零位的数量。但是__builtin_clz
会为输入0
返回不正确的值:
#include <stdio.h>
int main(void) {
unsigned int x = 0;
int lz = __builtin_clz(x);
printf("%d\n", lz);
return 1;
}
我希望这能在我的机器上打印32
。而是打印4195634
:
$ gcc -Wall clz.c
$ ./a.out
4195634
这是我的错吗?我在某处调用了一些未定义的行为吗?
答案 0 :(得分:2)
这是我的错吗?我在某处调用了一些未定义的行为吗?
是的,将0传递给__builtin_clz
。来自GCC documentation:
从最开始返回x中前导0位的数量 重要的位置。 如果x为0,则结果未定义。