1 c++ casting integer-arithmetic
我写了这样的代码:
#include<iostream>
using namespace std;
int main()
{
cout<<static_cast<float>(5/9)*9;
cout<<static_cast<float>(5)/9*9;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
预期产量:55
原始输出:05
为什么第一个静态转换语句变成 0 ?
在这个子表达式中
(5/9)
Run Code Online (Sandbox Code Playgroud)
本声明的
cout<<static_cast<float>(5/9)*9;
Run Code Online (Sandbox Code Playgroud)
这里使用了整数运算。子表达式的结果是 0。该结果被转换为 float 类型。
static_cast<float>( 0 )
Run Code Online (Sandbox Code Playgroud)
也就是说,在求值之后,将强制转换应用于括号中的主要子表达式。
在第二个声明中
cout<<static_cast<float>(5)/9*9;
Run Code Online (Sandbox Code Playgroud)
这实际上相当于
cout<< 5.0f/9*9;
Run Code Online (Sandbox Code Playgroud)
在子表达式中
static_cast<float>(5)/9
Run Code Online (Sandbox Code Playgroud)
或者是一样的
5.0f / 9
Run Code Online (Sandbox Code Playgroud)
使用浮点数运算,结果不等于0。
| 归档时间: |
|
| 查看次数: |
130 次 |
| 最近记录: |