将浮点数转换为 int,带和不带强制转换

Converting float to int, with and without cast

本文关键字:转换 浮点数 int      更新时间:2023-10-16

这两者是等价的吗?

float f = 3.14;
int i;
i = f; // 3

float f = 3.14;
int i;
i = (int) f; // 3

编译器处理这两种情况的方式没有区别。生成的机器代码将相同。但是,第一个是隐式转换,第二个是显式转换。根据编译器标志,在执行失去精度的隐式转换时,可能会收到警告。

附带说明一下,文字3.14的类型为 double ,这意味着语句float f = 3.14中也可能存在精度损失。一种干净的方法是编写float f = 3.14f指定这是类型 float 的值 3.14

它们是相同的。

在 32 位 x86 系统上使用 GCC 4.8.2 进行测试。

gcc -Wall -Wextra -Wpedantic在编译此代码时不会给出任何警告,但有了-Wconversion它会给出任何警告。

是的,这些是等价的,没有任何区别。

编译器

足够智能,可以对这两种情况一视同仁。但我更喜欢第二种方法,因为它在大型程序中更容易阅读。此外,建议指定在显式转换中强制转换的类型。最后,您的第一种方法可能无法在 C# 中使用。
参考: http://msdn.microsoft.com/en-us/library/ms173105.aspx

第二次转换也称为 c-cast,至少在 C++ 中应避免,最好使用static_cast

使用static_cast时,编译器将检查是否可以进行转换(即一种类型可以转换为另一种类型),当使用旧样式时,即使它们不兼容,它也将始终进行转换