gpt4 book ai didi

c - int 与 C 中的按位运算符一起 float

转载 作者:行者123 更新时间:2023-12-04 12:32:42 26 4
gpt4 key购买 nike

我正在编写一个函数,使用位运算符将 int 转换为 float。我不明白为什么我的代码不适用于所有输入。例如,它适用于 2、19、43 等,但它输出 -nan 用于 7、6、13、58 等。有人可以解释一下为什么会这样吗?谢谢。这是我的代码:

#include <stdio.h>

typedef union{
int x;
float fx;
}df;
int find_e(int x,int i){
if(x&1<<i) return i;
if(x==0) return -127;
return find_e(x,--i);
}
float int_to_float(int x){
df ime;
ime.x=0;
int sign = 0;
if(x<0){x=-x;sign = 1<<31; }
int position = find_e(x,31);
int e = position + 127;
int m = (x&(~(~0<<position)))<<(32-position);
ime.x |= sign;
ime.x |= e<<23;
ime.x |= m>>9;
return ime.fx;
}

int main()
{
int x;
scanf("%d",&x);
printf("%f\n", int_to_float(x));
return 0;
}

我使用 gcc 编译器。

最佳答案

问题是“m”的类型,int是带符号的,右移会带符号extend。

ime.x |= m>>9;

将所有不能为负的变量更改为 unsigned 而不是 int

我已经修复它并做了一些小改动:demo

关于c - int 与 C 中的按位运算符一起 float ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27759118/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com