将浮点数转换为 int,带和不带强制转换
Converting float to int, with and without cast
这两者是等价的吗?
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时,编译器将检查是否可以进行转换(即一种类型可以转换为另一种类型),当使用旧样式时,即使它们不兼容,它也将始终进行转换
相关文章:
- 将浮点数转换为无符号字符数组并打印出来
- 如何将时间字符串 (M:SS) 转换为浮点数
- 如何将浮点数(*)[6]转换为浮点**类型?
- 如何将浮点数转换为uint8_t?
- 将字符串转换为浮点数或整数,而无需使用内置函数(如 atoi 或 atof)
- 如何在C++(Arduino)中将浮点数组转换为字节数组
- 为什么C++在将浮点数转换为字符时没有显示缩小转换错误?
- 将(N 个字节)无符号字符指针转换为浮点数和双 C++
- C++ - 转换标准::浮点数组的字符串
- 为什么我不能在不进行任何转换的情况下将浮点数放入任何类型的 ptr 中?
- Zedboard zynq-7000 Opencl 浮点数从类型 'double*' 强制转换为类型 'double' 无效
- 将浮点数转换为字符串时如何加快此代码的速度?
- 我可以安全地将浮点数的结构转换为浮点数组吗C++?
- 如何将带有浮点数的字符串转换为十进制?
- 浮点到整数转换出错(即使浮点数已经是整数)
- C/C++ - 将浮点数转换为字节数组,以便字节保持排序
- 将整数的二进制数据转换为浮点数
- 使用 avr-gcc 隐式转换为浮点数:uint8_t vs. uint16_t
- 将浮点数向量转换为十六进制/二进制字符串
- 精确且无公差地将浮点数转换为字符串