0

我有这个代码:

std::string GetBinary32( double value )
{
union
{
     float input;   // assumes sizeof(float) == sizeof(int)
     int   output;
}    data;

data.input = value;

std::bitset<sizeof(float) * CHAR_BIT>   bits(data.output);

std::string mystring = bits.to_string<char, std::char_traits<char>, std::allocator<char> >();

return mystring;
}

我想获得双精度的 64 表示。

我需要改变什么?

4

1 回答 1

0

首先,虽然联合方法是一种流行的方法,但请记住,访问与最后写入的成员不同的联合成员在 C++ 中是未定义的行为。因此,您最好在编译器上测试结果并忘记可伸缩性。

话虽这么说,假设您的编译器使用 IEE754(可以按照此处提到的方式进行检查),您将需要更改联合以包含双精度和长长。long long 将在 32 位和 64 位机器上以 64 位表示,作为 Windows 和 Unix 上的事实上的标准(尽管 C++ 标准不强制任何大小,但只强制范围和 char、int 之间的大小排序,长等...)。

当然,使用 sizeof(double) 调整 bits 变量。

于 2015-11-18T20:23:07.600 回答