float x = 2.5;
int i = (int)x;
我们都知道结果是2,但我想知道为什么我们得到这个结果,理论是什么以及系统如何工作?可以用二进制形式(IEEE)来解释吗?
答案 0 :(得分:2)
C ++11§4.9/ 1:
“转换截断;也就是说,丢弃小数部分。如果截断值不能,则行为未定义 以目的地类型表示。
就是这样,它的理论:因为标准是这样说的。
这是一种合理的语言设计选择,但绝不是唯一合理的选择。
答案 1 :(得分:1)
这在C ++标准(草案标准N3337)中指定
4.9浮动积分转换
1浮点类型的prvalue可以转换为整数类型的prvalue。转换截断;也就是说,丢弃小数部分。如果截断的值无法在目标类型中表示,则行为未定义。 [注意:如果目的地类型是bool,请参阅4.12。 - 结束记录]