c++ - 在 C++ 中获取 double 的精确位表示

标签 c++ hash types hashtable bit

假设我们有一个双倍数,比方说,x = 4.3241;

很简单,我想知道,在 C++ 中,如何简单地为数字表示中的每个 位检索一个 int?

我看过其他questions并阅读 bitset 上的页面,但恐怕我仍然不明白如何检索这些位。

所以,例如,我希望输入是 x = 4.53,如果位表示是 10010101,那么我想要 8 个整数,每个代表每个 10

最佳答案

类似于:

double doubleValue = ...whatever...;
uint8_t *bytePointer = (uint8_t *)&doubleValue;

for(size_t index = 0; index < sizeof(double); index++)
{
    uint8_t byte = bytePointer[index];

    for(int bit = 0; bit < 8; bit++)
    {
        printf("%d", byte&1);
        byte >>= 1;
    }
}

... 将打印出位,在字节内从最低有效位到最高有效位排序,并从头到尾读取字节。根据您的机器体系结构,这意味着字节可能会或可能不会按重要性顺序排列。 Intel 是严格的小端字节序,因此您应该从最低位到最高位获取所有位;大多数 CPU 对 float 使用与整数相同的字节顺序,但即使这样也不能保证。

只需分配一个数组并存储位而不是打印它们。

(做出的假设:一个字节中有八位;在 C 中在技术上没有保证,但在您现在可能遇到的任何硬件上都相当可靠)

关于c++ - 在 C++ 中获取 double 的精确位表示,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32259970/

相关文章:

c++ - 修复线光栅化算法的近似值

c++ - C++ std::hash 实现总是确定性的吗?

ruby - 如何使用哈希在 Ruby 中存储方法?

types - 导入 Control.Exception 引起的 GHC 编译错误

compiler-construction - Play Framework 类型 ... 已经定义

c++ - 如何通过boost bimap查找内存占用

c++ - c++中序列容器和容器适配器的区别

c# - 调用 native 代码的多线程托管应用程序

ruby - IRB - Ruby 1.9.x 哈希语法 : {if: true} is not equal to {:if => true}

c++ - float 在 C++ 中四舍五入,我不明白为什么