以下是:
double t = 244.233;
int a = (int) t;
Run Code Online (Sandbox Code Playgroud)
是不是未定义的行为,因为244可以适应内部int我做对了吗?否则,如果它是更大的值而不是244不适合内部int这将是未定义的,我做对了吗?
我对C如何做到这一点更感兴趣.但这种情况与C++有区别吗?
在一次采访中,有人问我对以下代码有何看法:
#include <stdio.h>
int main()
{
float f = 10.7;
int a;
a = f;
printf ("%d\n", a);
}
Run Code Online (Sandbox Code Playgroud)
我回答了:
当您将a更改float为int没有强制转换时,编译器将发出警告.
int由于您没有使用演员表,因此将具有垃圾值.
然后,他们允许我在在线编译器上运行程序.我不堪重负.我的假设都是错误的.编译器没有发出任何警告,并且int值为10.即使我改变了,float如10.9或10.3这样的值,答案也是一样的.即使放一个cast也没有改变结果.
有人能告诉我为什么会发生这种情况,结果会在什么情况下有所不同.
注意:在编译时,面试官告诉我不要添加gcc标记.
编辑:现在我已经明白,浮动没有四舍五入,答案将是10.但有人可以解释我为什么这样设计?转换为int时为什么浮动,在下面四舍五入?有具体原因吗?