在C标准中定义的无符号整数是否为负二次转换的行为?

我有在不同平台上运行的代码,似乎得到不同的结果。 我正在寻找一个正确的解释。

Windows:

double dbl = -123.45; int d_cast = (unsigned int)dbl; // d_cast == -123 

WinCE(ARM):

 double dbl = -123.45; int d_cast = (unsigned int)dbl; // d_cast == 0 

编辑:

谢谢你指出了正确的方向。

修复变通方法

 double dbl = -123.45; int d_cast = (unsigned)(int)dbl; // d_cast == -123 // works on both. 

没有


此转换未定义,因此不可移植。

C99 / C11 6.3.1.4

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

根据C11 6.3.1.4脚注61:

当将实数浮点类型的值转换为无符号类型时,不需要执行将整数类型的值转换为无符号类型时执行的剩余操作。 因此,便携式实际浮动值的范围是(-1,Utype_MAX + 1)。