我试图用二进制表示一个小数,然后将其打印为 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/