gpt4 book ai didi

c - double 5.2在二进制文件中是如何表示的?

转载 作者:行者123 更新时间:2023-12-02 02:46:22 25 4
gpt4 key购买 nike

例如给定的程序

FILE *f = fopen("test.txt","w");
double d = 5.2;
fwrite(&d, sizeof(typeof(d)), 1, f);
fclose(f);

当你使用xxd查看我得到的内容时

//binary
0000000: 11001101 11001100 11001100 11001100 11001100 11001100 ......
0000006: 00010100 01000000 .@
//hex
0000000: cdcc cccc cccc 1440 .......@

但我找到了How to represent FLOAT number in memory in C它应该看起来像

0 10000001 01001100110011001100110

所以我不确定它在内存和文件中的二进制文件是否相同,或者我完全错了。我如何确定给定示例的浮点值?

最佳答案

您显示的位模式 0 10000001 01001100110011001100110 用于 IEEE-754 基本 32 位二进制浮点表示,通常用于 float。您请求 double 的表示,它通常使用 IEEE-754 基本 64 位二进制。

您显示的字节 cdcc cccc cccc 1440 表示大约 5.2,采用小端顺序。在高值字节中,位于 0x80 位置的第一位为零。它是符号位,零表示正。接下来的七位 0x40 和下一个字节的四个字节 0x141 是指数。它们一起是 0x401。指数偏移 0x3ff。因此,对于编码为 0x401 的指数,实际指数为 2,即 22

剩余的位编码有效数字的尾随位。它们是 0x4ccccccccccccd。对于普通数字,有效数字放在“小数点”(小数点的一般等价物)之后,小数点前加 1:1.4ccccccccccccd16。在十进制中,这大约是 1.3(正好是 1.3000000000000000444089209850062616169452667236328125)。

加起来的值为 + 22 • 1.3000000000000000444089209850062616169452667236328125 = 5.2000000000000001776356839400250464677810316594.

关于c - double 5.2在二进制文件中是如何表示的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54640677/

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