首页 > 解决方案 > 静态演员表中的表达式

问题描述

我写了这样的代码:

#include<iostream>
using namespace std;

int main()
{
    cout<<static_cast<float>(5/9)*9;
    cout<<static_cast<float>(5)/9*9;
    return 0;
}

预期输出:55

原始输出:05

为什么第一个静态转换语句变成 0 ?

标签: c++castinginteger-arithmetic

解决方案


在这个子表达式中

(5/9)

本声明的

cout<<static_cast<float>(5/9)*9;

有使用整数算术。子表达式的结果是 0。这个结果被转换为浮点类型。

static_cast<float>( 0 )

也就是说,在评估之后,将强制转换应用于括号中的主要子表达式。

在第二个声明中

cout<<static_cast<float>(5)/9*9;

这实际上相当于

cout<< 5.0f/9*9;

在子表达式中

static_cast<float>(5)/9

或者是一样的

5.0f / 9 

使用了带有浮点数的算术,结果不等于0。


推荐阅读