我的一个朋友早些时候问过我这个问题,但我发现自己紧紧抓着稻草试图给他一个充分的解释。
答案 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 类型是实现定义的。它通常以类似于无符号类型的方式包装,但语言不保证。