假设我们有一个双倍数,比方说,x = 4.3241;
很简单,我想知道,在 C++ 中,如何简单地为数字表示中的每个 位检索一个 int?
我看过其他questions并阅读 bitset 上的页面,但恐怕我仍然不明白如何检索这些位。
所以,例如,我希望输入是 x = 4.53
,如果位表示是 10010101
,那么我想要 8 个整数,每个代表每个 1
或 0
。
最佳答案
类似于:
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/