gpt4 book ai didi

c - 使用 0b 表示打印 (printf) float

转载 作者:太空宇宙 更新时间:2023-11-04 00:23:55 25 4
gpt4 key购买 nike

我试图用二进制表示一个小数,然后将其打印为 float 。我已经完成了定点到浮点的转换。

十进制数:-342.265625

固定点:-101010110.010001

32 位 float :11000011101010110010001000000000

64 位 float ( double ):11000000011101010110010001000000000000000000000000000000000000000

*我已经用 IEEE 754 转换器仔细检查过

*我也知道 printf 将 float 更改为 double 以打印它们,但将其声明为 double 应该可行吗?我以为……?

代码:

int main()
{

float floaty = 0b11000011101010110010001000000000;
double doubley = 0b1100000001110101011001000100000000000000000000000000000000000000;
printf("Float: %f\n", floaty);
printf("Double: %lf\n", doubley);

}

输出:

Float: 3282772480.000000
Double: 13868100853597995008.000000

编译器是gcc,标准是c99

最佳答案

来自 gcc 的 documentation :

The type of these constants follows the same rules as for octal or hexadecimal integer constants, so suffixes like ‘L’ or ‘UL’ can be applied.

因此,您分配给 float 和 double 的二进制数实际上是整数类型,并且不会直接映射到您分配给的基础类型的位模式。

换句话说,这:

 float floaty = 0b11000011101010110010001000000000;
double doubley = 0b1100000001110101011001000100000000000000000000000000000000000000;

相当于:

 float floaty = 3282772480;
double doubley = 13868100853597995008;

关于c - 使用 0b 表示打印 (printf) float,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39882269/

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