相关疑难解决方法(0)

当未定义的行为时,将double转换为整数

以下是:

double t = 244.233;
int a = (int) t;
Run Code Online (Sandbox Code Playgroud)

是不是未定义的行为,因为244可以适应内部int我做对了吗?否则,如果它是更大的值而不是244不适合内部int这将是未定义的,我做对了吗?

我对C如何做到这一点更感兴趣.但这种情况与C++有区别吗?

c c++

2
推荐指数
2
解决办法
803
查看次数

转换为int时浮点数为何在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更改floatint没有强制转换时,编译器将发出警告.

  • int由于您没有使用演员表,因此将具有垃圾值.

然后,他们允许我在在线编译器上运行程序.我不堪重负.我的假设都是错误的.编译器没有发出任何警告,并且int值为10.即使我改变了,float如10.9或10.3这样的值,答案也是一样的.即使放一个cast也没有改变结果.

有人能告诉我为什么会发生这种情况,结果会在什么情况下有所不同.

注意:在编译时,面试官告诉我不要添加gcc标记.


编辑:现在我已经明白,浮动没有四舍五入,答案将是10.但有人可以解释我为什么这样设计?转换为int时为什么浮动,在下面四舍五入?有具体原因吗?

c floating-point int casting type-conversion

-1
推荐指数
1
解决办法
264
查看次数

标签 统计

c ×2

c++ ×1

casting ×1

floating-point ×1

int ×1

type-conversion ×1