标准是什么(标准中有差异?)说关于将整数范围内的浮点数分配给这个整数?
那么这里应该发生什么,假设16位短,以保持数字小 (USHRT_MAX == 65535)
float f = 100000.0f;
short s = f;
s = (short) f;
unsigned short us = f;
us = (unsigned short) f;
Run Code Online (Sandbox Code Playgroud)
这是未定义的行为(不需要诊断).见C11 6.3.1.4(早期标准有类似的文字):
当实数浮动类型的有限值被转换为除了以外的整数类型时
_Bool,小数部分被丢弃(即,该值被截断为零).如果整数部分的值不能用整数类型表示,则行为是未定义的.
因此,假设您的系统具有USHRT_MAXas 65535,short s = f;并且所有后续行都会导致未定义的行为.