c++ - 将范围有限的 float 转换为保持排序顺序和精度的无符号整数?

标签 c++ c types casting

我有一个固定在 0.0f 和 1.0f 之间的 float z_f,我想将其转换为保持排序顺序的无符号整数。

一个简单的方法可能是:

float z_f = 0.5;
unsigned int z_ui = (unsigned int) z_f*(MAX_UINT32);//Scale to full range of uint32

这行得通吗?
这会导致精度损失吗? 有没有更好的方法来达到同样的效果?

最佳答案

类型转换 (unsigned int) z_f 比二进制 * 具有更高的优先级,因此您有效地将 MAX_UINT32 与 0 或 1 相乘.

关于c++ - 将范围有限的 float 转换为保持排序顺序和精度的无符号整数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19710828/

相关文章:

c++ - 在 vector C++ 的索引处插入对象

c++ - CreateWindowEx 的资源

c++ - 符号查找错误 : undefined symbol: _alloca

c - 为什么在下面的示例中循环不会无限运行?

java:重载时返回类型不同

c# - 比较 C# 中的盒装对象

c++ - 在 Qt 中创建/写入新文件

c - 使用一些 posix 命令的 C 程序

c++ - 默认情况下整数文字的类型不是 int?

php - 将大整数从 php 存储到 mysql 的最节省空间的方法?