为什么我在类型转换后得到 int 值,但十进制值在括号中?

Why do I get int value after typecasting but decimal value is in bracket?

提问人:Elon Musk On Stackoverflow 提问时间:9/10/2022 最后编辑:StoryTeller - Unslander MonicaElon Musk On Stackoverflow 更新时间:9/10/2022 访问量:82

问:

我对 c++ 非常熟悉,但今天我注意到一些事情,

float a=(float)5/2; //this gives 2.5, its okay
float b=(float)(5/2); //this gives 2, why?

请您说出这个主题,任何答案都会对我有所帮助。

C++ 强制转换 浮点

评论

3赞 Jesper Juhl 9/10/2022
第二行是进行整数除法,然后将其结果转换为 。float

答:

2赞 Vlad from Moscow 9/10/2022 #1

在括号中的这个表达式中,使用了整数算术。表达式的结果是 。(5/2)2

在此表达式中,使用了浮动算术,因为其中一个操作数在其显式转换后具有类型。一元铸造算子的优先级高于除法运算符。(float)5/2float(float)5/

你可以等效地写

5.f/2

评论

0赞 Elon Musk On Stackoverflow 9/10/2022
你的意思是(浮点数)5/2,会使浮点数 5 除以整数 2 吗?
0赞 Vlad from Moscow 9/10/2022
@KapilChauhan 你是写的。铸件应用于操作数 5。
2赞 Bob__ 9/10/2022
@ElonMuskOnStackoverflow 实际上,整数 2 也被(隐式)转换为,然后才执行(浮点)除法。float
2赞 templatetypedef 9/10/2022 #2

这是运算符优先级的问题。当你写

(float)5/2

它被解释为

((float) 5) / 2

这意味着“将 5 视为浮点数,然后将其除以整数 2”。因此,除法是作为浮点除法完成的。

当你写

(float)(5/2)

你说的是“将整数 5 除以整数 2,然后将其视为浮点数。因此,完成的除法是整数除法,它向下舍入,所以你得到 2 作为你的结果。