2014-09-28 45 views
1
float x = 2.5; 
int i = (int)x; 

我们都知道结果是2,但我想知道为什么我们得到这个结果,理论和系统是如何工作的?它可以用二进制形式(IEEE)解释吗?关于漂浮到int

+2

我们得到这个结果是因为它是语言规范所要求的。语言规范可能要求在'i'中产生'25'。在那种情况下,它会愉快地制作'25'。即它背后没有“理论”,结果与任何“二元形式”无关。只有一个要求,通过任何必要的手段来实施。 – AnT 2014-09-28 04:55:31

回答

1

这在C++标准(草案标准N3337)被指定

4.9浮动积分转换

1浮点类型的prvalue可以转换为一个整数的prvalue类型。转换截断;也就是说,小数部分被丢弃。如果截断的值无法在目标类型中表示,则行为未定义。 [注意:如果目标类型是bool,请参阅4.12。 - 尾注]

2

C++ 11§4.9/ 1:

转换截断;也就是说,小数部分被丢弃。如果截断的值不能是目标类型中表示的 ,则行为未定义。

这’的IT,它的理论:因为标准是这样说的

这是一个合理的语言设计选择,但决不是唯一可能的合理选择。