如果我将带小数点的数字分配给整数而不是浮点数,会发生什么?

时间:2011-09-20 23:50:38

标签: c++

我的一个朋友早些时候问过我这个问题,但我发现自己紧紧抓着稻草试图给他一个充分的解释。

2 个答案:

答案 0 :(得分:4)

浮点数或双精度数将被截断。因此2.99将变为2,而-2.99将变为-2。

标准的相关部分(第4.9节)

  

1浮点类型的prvalue可以转换为prvalue   整数类型。转换截断;也就是说,分数   部分被丢弃。如果截断值,则行为未定义   无法在目的地类型中表示。

答案 1 :(得分:2)

如果将任何数字类型(整数,浮点)的值分配给另一个数字类型的对象,则该值将隐式转换到目标类型。在初始化或将参数传递给函数时也会发生同样的事情。

转换完成方式的规则因您使用的类型而异。

如果目标类型可以准确表示值:

short s = 42;
int i = s;

double x = 42.0;
int j = x;

表示可能会有变化,但数学值不变。

如果浮点类型转换为整数类型,并且值不能被表示,那么它会被截断,正如@ sashang的答案所说 - 但是如果截断的值不能表示,行为未定义。

将整数(有符号或无符号)转换为无符号类型会导致值减去模MAX+1,其中MAX是无符号的最大值类型。例如:

unsigned short s = 70000; // sets s to 4464 (70000 - 65536)
                          // if unsigned short is 16 bits

如果值不适合,则将整数转换为 signed 类型是实现定义的。它通常以类似于无符号类型的方式包装,但语言不保证。