__builtin_clz返回输入零的错误值

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了__builtin_clz返回输入零的错误值相关的知识,希望对你有一定的参考价值。

我正在使用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
", lz);
  return 1;
}

我希望这能在我的机器上打印32。相反,它打印4195634

$ gcc -Wall clz.c
$ ./a.out
4195634

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

答案

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

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

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

以上是关于__builtin_clz返回输入零的错误值的主要内容,如果未能解决你的问题,请参考以下文章

RISC-V踩坑记----__builtin_clz((x)库函数的应用

c_cpp 包含__builtin_clz()的clz()实现 - 请参阅博客文章http://foonathan.github.io/blog/2016/02/11/implementation-c

如何获得零的 VSX 值?

数论模板

返回零的最小值[重复]

Win 64bit GetThreadContext 返回归零的寄存器,或 0x57 错误代码