__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