Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/61.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/1/visual-studio-2008/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
我可以使用cast将长双精度转换为float/double/int吗?_C_Casting_Type Conversion - Fatal编程技术网

我可以使用cast将长双精度转换为float/double/int吗?

我可以使用cast将长双精度转换为float/double/int吗?,c,casting,type-conversion,C,Casting,Type Conversion,仅使用cast就可以安全地从长双精度转换为浮点/双精度/int?在C语言中,如果我将一个类型T1转换为T2,我会安全地在类型T2的变量中包含该类型所能容纳的所有位吗?或者我是否遗漏了什么,比如UB?我这样问是因为在C中,您看到的并不是您认为的那样。在标准C中,如果值可以在目标类型中精确表示,则值将保留。 如果在目标类型的范围内,则会产生两个最接近的值(选项的实现定义规则)中的一个。 否则,严格来说,我们有未定义的行为,除非实现声明IEEE60559一致性 6.3.1.4实浮点和整数 1当实浮点类

仅使用cast就可以安全地从
长双精度
转换为
浮点/双精度/int
?在C语言中,如果我将一个类型
T1
转换为
T2
,我会安全地在类型
T2
的变量中包含该类型所能容纳的所有位吗?或者我是否遗漏了什么,比如UB?我这样问是因为在C中,您看到的并不是您认为的那样。

在标准C中,如果值可以在目标类型中精确表示,则值将保留。
如果在目标类型的范围内,则会产生两个最接近的值(选项的实现定义规则)中的一个。
否则,严格来说,我们有未定义的行为,除非实现声明IEEE60559一致性

6.3.1.4实浮点和整数 1当实浮点类型的有限值转换为除_Bool以外的整数类型时, 舍弃小数部分(即,该值向零截断)。如果 整数部分不能用整数类型表示,行为未定义。61)
2当整数类型的值转换为实浮点类型时,如果 转换后的数据可以在新类型中准确表示,但它没有改变。如果值为 转换的值在可以表示但无法表示的值范围内 确切地说,结果是所选的最接近的较高或较低的可表示值 以实现定义的方式。如果要转换的值超出 可以表示的值,则行为未定义。一些隐式分析的结果 转换的范围和精度可能比 新型(见6.3.1.8和6.8.6.4)

6.3.1.5实际浮动类型 1当实浮点类型的值转换为实浮点类型时,如果该值为 转换后的数据可以在新类型中准确表示,但它没有改变。如果值为 转换的值在可以表示但无法表示的值范围内 确切地说,结果是所选的最接近的较高或较低的可表示值 以实现定义的方式。如果要转换的值超出 可以表示的值,则行为未定义。一些隐式分析的结果 转换的范围和精度可能比 新型(见6.3.1.8和6.8.6.4)

如果您的实现通过定义预处理器宏
\uuuuuustdc\uiec\u559\uuuu
声明IEEE60559符合浮点,则情况会得到很大改善

-浮动类型的转换提供了IEC 60559之间的转换 浮点精度。
-从整数到浮点类型的转换提供了IEC 60559转换 从整数到浮点。
-从浮点类型到整数类型的转换提供了类似于IEC 60559的转换 但总是向零转


在标准C中,如果该值可以在目标类型中精确表示,则该值将被保留。
如果在目标类型的范围内,则会产生两个最接近的值(选项的实现定义规则)中的一个。
否则,严格来说,我们有未定义的行为,除非实现声明IEEE60559一致性

6.3.1.4实浮点和整数 1当实浮点类型的有限值转换为除_Bool以外的整数类型时, 舍弃小数部分(即,该值向零截断)。如果 整数部分不能用整数类型表示,行为未定义。61)
2当整数类型的值转换为实浮点类型时,如果 转换后的数据可以在新类型中准确表示,但它没有改变。如果值为 转换的值在可以表示但无法表示的值范围内 确切地说,结果是所选的最接近的较高或较低的可表示值 以实现定义的方式。如果要转换的值超出 可以表示的值,则行为未定义。一些隐式分析的结果 转换的范围和精度可能比 新型(见6.3.1.8和6.8.6.4)

6.3.1.5实际浮动类型 1当实浮点类型的值转换为实浮点类型时,如果该值为 转换后的数据可以在新类型中准确表示,但它没有改变。如果值为 转换的值在可以表示但无法表示的值范围内 确切地说,结果是所选的最接近的较高或较低的可表示值 以实现定义的方式。如果要转换的值超出 可以表示的值,则行为未定义。一些隐式分析的结果 转换的范围和精度可能比 新型(见6.3.1.8和6.8.6.4)

如果您的实现通过定义预处理器宏
\uuuuuustdc\uiec\u559\uuuu
声明IEEE60559符合浮点,则情况会得到很大改善

-浮动类型的转换提供了IEC 60559之间的转换 浮点精度。
-从整数到浮点类型的转换提供了IEC 60559转换 从整数到浮点。
-从浮点类型到整数类型的转换提供了类似于IEC 60559的转换 但总是向零转


在标准C中,如果该值可以在目标类型中精确表示,则该值将被保留。
如果在目标类型的范围内,则会产生两个最接近的值(选项的实现定义规则)中的一个。
否则,我们严格地说是h