c - iphone:如果 float 为负数,则转换为无符号整数的 float 将设置为 0?

标签 c iphone casting floating-point type-conversion

尝试一下:

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/

相关文章:

c++ - 如何处理浮点计算中的超精度?

iphone - iOS - 状态栏随机变为纯黑色

iphone - 如何使用 "from-color"和 "to-color"创建具有垂直渐变的 UIImage

javascript - javascript如何识别对象

c++ - 人们会推荐哪些工具来查看 gcc/linux 目标文件?

c - 空指针、类型转换和可能的代码改进

ruby - 不调用 `Hash#to_a` 将 Ruby 哈希转换为数组

c# - 将 DataTable 中的列值从 byte[] 转换为 String

c - K&R 练习 1-13

c# - iOS:缺少条形样式外观的 Monotouch 绑定(bind)?