gpt4 book ai didi

c - 一个数字的 printf 输出错误

转载 作者:行者123 更新时间:2023-12-01 13:19:10 27 4
gpt4 key购买 nike

int main()
{
double i=4;
printf("%d",i);
return 0;
}

谁能告诉我为什么这个程序输出0?

最佳答案

当您创建一个double 并用值4 初始化时,它的64 位根据IEEE-754 standard 填充。对于 double float 。 float 分为三个部分:符号指数分数(也称为有效数系数尾数)。符号是一位,表示数字是正数还是负数。其他字段的大小取决于数字的大小。要解码数字,使用以下公式:

1.分数 × 2指数 - 1023

在您的示例中,符号位是 0,因为数字是正数,小数部分是 0,因为数字被初始化为整数,指数部分包含值 1025(2 和偏移量 1023)。结果是:

1.0 × 22

或者,如您所料,4。数字的二进制表示(分为几个部分)如下所示:

0 10000000001 0000000000000000000000000000000000000000000000000000

Or, in hexadecimal, 0x4010000000000000. When passing a value to printf using the %d specifier, it attempts to read sizeof(int) bytes from the parameters you passed to it. In your case, sizeof(int) is 4, or 32 bits. Since the first (rightmost) 32 bits of the 64-bit floating-point number you supply are all 0, it stands to reason that printf produces 0 as its integer output. If you were to write:

printf("%d %d", i);

然后您可能会得到 0 1074790400,其中第二个数字相当于 0x40100000。我希望你明白为什么会这样。其他答案已经给出了解决方法:使用 %f 格式说明符,printf 将正确接受您的 double

关于c - 一个数字的 printf 输出错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3565215/

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