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

标签 c binary floating-point printf

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

相关文章:

c - Unresolved external 因素 (LNK1120)

c - 文件放在哪里以及如何编译和运行它?

c - 静态链接 libpng 到共享库

c - 了解 C 中的数组声明

binary - 有用的二进制差异工具(除了 msdn[apatch 和 mpatch]、xdelta、bsdiff、vbindiff 和 winmerge)

swift - 二元运算符问题 '-'

c - C 多线程环境中的浮点损坏

sql - Oracle 中的数字精度

java - 为什么 HashSet 区分 0.0 和 -0.0

c++ - 二进制文件和操作系统