这两个等价吗?将浮点数转换为int,有无转换
float f = 3.14;
int i;
i = f; // 3
而且
float f = 3.14;
int i;
i = (int) f; // 3
这两个等价吗?将浮点数转换为int,有无转换
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
。
它将与'-Wconversion' – MBlanc
@MBlanc是的,你是对的。答案已更新。 –
编译器足够智能,可以同时处理这两种情况。但我更喜欢第二种方法,因为在大型程序中阅读起来更容易。另外建议在显式转换中指定您正在投射的类型。最后,您的第一种方法可能无法在C#中工作。
Ref:http://msdn.microsoft.com/en-us/library/ms173105.aspx
它们是相同的。你为什么要问? – rjv
都是一样的......牛顿理论越来越复杂..:D –
3 == 3,不是吗? :P –