考虑以下:
void Foo(int start, int end)
{
int mid = (start + end) / 2;
}
void Bar(int start, int end)
{
int mid = (start + end) * 0.5;
}
Run Code Online (Sandbox Code Playgroud)
为什么Foo编译成功而不成功Bar?除以2隐式方式将结果转换为一段int时间乘以0.5得到的未转换double:
无法将类型'double隐式转换为int.存在显式转换(您是否错过了演员?)
这背后的C#语言设计师的推理是什么?
Mih*_*eac 10
所述/确实整数除法(5/3 = 1).要使它执行浮点除法,其中一个操作数必须是浮点(float或double).这是因为有些情况下您的应用程序想要访问商或部门的其余部分(对于您使用的其余部分%).此外,整数除法比浮动除法更快.
另一方面,乘以浮点数总是会返回一个浮点数.要将其保存为整数类型,您必须自己进行类型转换.浮点值在内存中具有不同的表示,并且还可能导致精度损失.
几乎所有编程语言都是一样的:几乎所有编程语言都有整数除法和浮点除法,更常用的是同一个算子.几乎所有类型语言都需要从浮点到整数类型的转换.
| 归档时间: |
|
| 查看次数: |
2319 次 |
| 最近记录: |