尝试一下:
volatile float bob = -344.0f;
unsigned int fred = (unsigned int)bob;
printf("%d\n",fred);
输出将为 0。
显然,我希望它能够回绕,就像我从一个signed int 转换为一个unsgined int 一样(它确实在iphone 上回绕并按预期运行)
我们假设这与浮点设置有关。
有什么想法吗?
最佳答案
这是预料之中的 - 将负 float 转换为无符号整数会导致未定义的行为 (UB)。如果您希望该值环绕(这也是 UB,顺便说一句),那么您需要先转换为(有符号)int,然后再转换为无符号 int。理想情况下,您根本不应该依赖 UB,而是找到更好的方法来完成您需要做的事情。
关于c - iphone:如果 float 为负数,则转换为无符号整数的 float 将设置为 0?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2490600/