__builtin_clz返回输入零的错误值

时间:2018-03-30 19:13:35

标签: c gcc

我使用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

这是我的错吗?我在某处调用了一些未定义的行为吗?

1 个答案:

答案 0 :(得分:2)

  

这是我的错吗?我在某处调用了一些未定义的行为吗?

是的,将0传递给__builtin_clz。来自GCC documentation

  

从最开始返回x中前导0位的数量   重要的位置。 如果x为0,则结果未定义