gpt4 book ai didi

c - C 中的三元运算符

转载 作者:太空狗 更新时间:2023-10-29 16:36:57 25 4
gpt4 key购买 nike

为什么这个程序给出了意外的数字(例如:2040866504-786655336)?

#include <stdio.h> 
int main()
{
int test = 0;
float fvalue = 3.111f;
printf("%d", test? fvalue : 0);

return 0;
}

为什么它打印出意外的数字而不是 0?它应该进行隐式类型转换吗?这个程序是为了学习目的,没什么大不了的。

最佳答案

很可能,您的平台在浮点寄存器中传递浮点值,在不同的寄存器(或堆栈)中传递整数值。您告诉 printf 查找一个整数,所以它在寄存器中查找整数被传入(或堆栈)。但是您向它传递了一个 float,因此零被放置在 printf 从未查看过的浮点寄存器中。

三元运算符遵循语言规则来决定其结果的类型。它不能有时是整数,有时是 float 。这些可能有不同的大小,存储在不同的地方等等,这使得无法生成理智的代码来处理两种可能的结果类型。

这是一个猜测。也许完全不同的事情正在发生。未定义的行为是有原因的。如果没有丰富的平台和编译器细节经验和知识,这些事情可能无法预测,也很难理解。永远不要让别人说服你 UB 是好的或安全的,因为它似乎可以在他们的系统上运行。

关于c - C 中的三元运算符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19063517/

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