提问人:Elon Musk On Stackoverflow 提问时间:9/10/2022 最后编辑:StoryTeller - Unslander MonicaElon Musk On Stackoverflow 更新时间:9/10/2022 访问量:82
为什么我在类型转换后得到 int 值,但十进制值在括号中?
Why do I get int value after typecasting but decimal value is in bracket?
问:
我对 c++ 非常熟悉,但今天我注意到一些事情,
float a=(float)5/2; //this gives 2.5, its okay
float b=(float)(5/2); //this gives 2, why?
请您说出这个主题,任何答案都会对我有所帮助。
答:
2赞
Vlad from Moscow
9/10/2022
#1
在括号中的这个表达式中,使用了整数算术。表达式的结果是 。(5/2)
2
在此表达式中,使用了浮动算术,因为其中一个操作数在其显式转换后具有类型。一元铸造算子的优先级高于除法运算符。(float)5/2
float
(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 作为你的结果。
评论
float