将一个大浮点数存储到一个整数中(强制转换,不投出)

时间:2017-03-17 09:23:48

标签: c

标准是什么(标准中有差异?)说关于将整数范围内的浮点数分配给这个整数?

那么这里应该发生什么, 假设16位短,保持数字小(USHRT_MAX == 65535)

float f = 100000.0f;
short s = f;
s = (short) f;
unsigned short us = f;
us = (unsigned short) f;

1 个答案:

答案 0 :(得分:5)

这是未定义的行为(不需要诊断)。见C11 6.3.1.4(早期标准有类似的文字):

  

当实数浮动类型的有限值被转换为除_Bool以外的整数类型时,小数部分被丢弃(即,该值被截断为零)。如果整数部分的值不能用整数类型表示,则行为是未定义的。

因此,假设您的系统USHRT_MAX65535short s = f;并且所有后续行都会导致未定义的行为。