c++ - 静态演员表中的表达式
问题描述
我写了这样的代码:
#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。这个结果被转换为浮点类型。
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。
推荐阅读
- javascript - 如何让 Jest 不向我显示所有跳过的测试的摘要?
- excel - How to add a conditional line break before a row contains a specific character in Excel?
- svg - 带有公共标识符的 XHTML、MathML 和 SVG 模块和其他实体的完整列表?
- c++ - 忙碌模式下的 QProgressDialog 不更新
- sql - 带有左连接的 Oracle 更新
- java - 无法打印正确的对等消息 (Java)
- javascript - 使用 XMLHttpRequest 登录网站
- salt-stack - Saltstack 通过带有多个参数的 rest_cherrypy 通过 cmd.script 运行 bash 脚本
- python - 运行 Python 脚本,直到它匹配所需的结果
- c# - 调用 Shutdown() 时防止关闭事件触发