龙空技术网

浮点型和整型之间的转换

生菜八分 68

前言:

此刻我们对“随机浮点数到随机整数的转变”可能比较关怀,你们都想要知道一些“随机浮点数到随机整数的转变”的相关文章。那么小编同时在网摘上汇集了一些关于“随机浮点数到随机整数的转变””的相关内容,希望同学们能喜欢,大家一起来学习一下吧!

在 C 语言中,当一个有限浮点型数值被转换为非 _Bool 类型的其它整数类型时,小数部分将被丢弃(也就是说,值向零方向截短)。例如:

double d1 = 12.34;int i1 = d1; printf("i1 = %d\n", i1);

浮点值 12.34 转换为整数时,后面的小数部分会被丢弃,因此这段代码的运行结果是:

i1 = 12

如果整数部分无法由整数类型表示,则该行为是未定义的。例如:

double d2 = 98765.43;unsigned short us = d2; printf("us = %d\n", us);

由于 unsigned short 能够表示的最大值是 32767,因此浮点值 98765.43 的整数部分无法被 unsigned short 表示,该行为是未定义的。在 x64-Ubuntu 环境下,这段代码的运行结果是:

us = 33229

注:这里的结果 33229 是由 98765 - 65536 计算得来的,也就是说执行了无符号整型转换过程中的取余运算。但这在浮点型和无符号整型之间的转换中不是必须的,因此可移植的浮点值的范围是 -1 至无符号整型最大值 + 1 之间。

整型之间的转换

当一个整数类型值被转换为浮点类型时,如果该值能够被浮点类型精确表示,则值保持不变。例如:

int i2 = 17; double d3 = i2; printf("d3 = %f\n", d3);

由于整数值 17 能够被浮点类型精确表示,因此这段代码的运行结果是:

d3 = 17.000000

如果被转换的整数值在可表示范围值内但不能精确表示,则结果要么是最接近可表示值的稍大值,要么是最接近可表示值的稍小值,具体选择哪个值取决于实现定义的方式。如果被转换的整数值不在可表示浮点值范围以内,该行为是未定义的。

一些隐式转换的结果可能会使用比要求的浮点型更宽的范围和精度来表示。

#头条创作挑战赛##C语言每日小知识#

标签: #随机浮点数到随机整数的转变