Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/126.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/three.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如果我将一个带小数点的数字赋给一个整数而不是浮点,会发生什么?_C++ - Fatal编程技术网

C++ 如果我将一个带小数点的数字赋给一个整数而不是浮点,会发生什么?

C++ 如果我将一个带小数点的数字赋给一个整数而不是浮点,会发生什么?,c++,C++,早些时候,我的一位朋友问了我这个问题,但我发现自己在拼命给他一个充分的解释。浮点或双精度浮点将被截断。因此2.99将变为2,-2.99将变为-2 标准中的相关章节(第4.9节) 1浮点类型的prvalue可以转换为prvalue 整数类型。转换截断;也就是说,分数 零件被丢弃。如果截断的值 无法在目标类型中表示 浮点或双精度浮点将被截断。因此2.99将变为2,-2.99将变为-2 标准中的相关章节(第4.9节) 1浮点类型的prvalue可以转换为prvalue 整数类型。转换截断;也就是说,分

早些时候,我的一位朋友问了我这个问题,但我发现自己在拼命给他一个充分的解释。

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

标准中的相关章节(第4.9节)

1浮点类型的prvalue可以转换为prvalue 整数类型。转换截断;也就是说,分数 零件被丢弃。如果截断的值 无法在目标类型中表示


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

标准中的相关章节(第4.9节)

1浮点类型的prvalue可以转换为prvalue 整数类型。转换截断;也就是说,分数 零件被丢弃。如果截断的值 无法在目标类型中表示


如果将任何数值类型(整数、浮点)的值指定给另一数值类型的对象,则该值将隐式转换为目标类型。在初始化或向函数传递参数时也会发生同样的情况

如何进行转换的规则因您使用的类型而异

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

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

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

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

如何进行转换的规则因您使用的类型而异

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

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


如果值不合适,则将整数转换为有符号类型是由实现定义的。它通常以一种类似于无符号类型的方式进行包装,但该语言不能保证这一点。

您尝试过吗?@Beta为什么尝试它会有帮助?如果它是UB,那么尝试它对你没有任何帮助。是因为我,还是因为你可以愉快地将一个浮点赋值给一个int,这并不令人沮丧。我不需要尝试它,因为我已经知道会发生什么。我简直想不出该怎么说。你试过吗?@Beta为什么试过会有帮助?如果它是UB,那么尝试它对你没有任何帮助。是因为我,还是因为你可以愉快地将一个浮点赋值给一个int,这并不令人沮丧。我不需要尝试它,因为我已经知道会发生什么。我简直想不出该怎么说。你应该展示消极的情况,也可能是违反直觉的。谢谢!出于某种原因,我用了一个艰难的取舍类比,但他只提出了一连串的问题。(“那为什么不起来呢?…等等)实际上,使用truncated会让他更清楚。@DavidHeffernan:如果被截断的值不能在目标类型中表示,这是未定义的。好的,我明白了。抱歉!尽管如此,使用负值的示例还是很有趣的。@DavidHeffernan:这可能是因为shell解释该程序返回值的方式。-2变成254。你应该展示否定的情况,也可能是违反直觉的。谢谢!出于某种原因,我使用了一个艰难的取舍类比,但他只提出了一连串的问题。(“为什么不向上呢?…等等)实际上,使用truncated会让他更清楚。@DavidHeffernan:如果被截断的值不能在目标类型中表示,这是未定义的。好的,我明白了。很抱歉尽管如此,使用负值的示例还是很有趣的。@DavidHeffernan:这可能是因为shell解释该程序返回值的方式-2变成254。