c++ - 静态强制转换中的表达式

标签 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;
}

预期产量:55

原始输出:05

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

最佳答案

在这个子表达式中

(5/9)

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

使用整数运算。子表达式的结果为0。此结果转换为float类型。
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。

关于c++ - 静态强制转换中的表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61782729/

相关文章:

c - 在 C 中使用 unsigned 并产生负临时结果

python - 为什么 2 * x * x 在 Python 3.x 中比 2 * ( x * x ) 快,对于整数?

c++ - 使用 C++ 和 Linux 获取系统的逻辑地址

java - 向上转换对象 - 静态类型和非静态类型的区别

c++ - 尽管定义了强制转换运算符,但没有强制转换

java - 二进制加法执行类型边界检查,而速记和递增则不执行

c++ - 使用 float 或 double 或 int 的 C/C++ 函数

c++ - 如何在VST 2.4中创建子窗口?

c++ - std::result_of 简单函数

c# - 使用泛型避免缓存不同类型时的强制转换