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;
}

double の 64 表現を取得したい。

何を変更する必要がありますか?

4

1 に答える 1

0

まず、ユニオン メソッドはこれを行うための一般的なメソッドですが、最後に記述されたメンバーとは異なるユニオン メンバーにアクセスすることは、C++ では未定義の動作であることに注意してください。したがって、コンパイラで結果をテストし、収益性については忘れてください。

そうは言っても、コンパイラが IEE754 を使用していると仮定すると (これは、ここで説明したように確認できます)、double と long long を含むように共用体を変更する必要があります。long long は、32 ビットと 64 ビットの両方のマシンで、Windows と Unix の事実上の標準として 64 ビットで表されます (ただし、C++ 標準はサイズについて何も強制せず、範囲と char、int 間のサイズの順序のみを強制します)。 、長いなど...)。

そしてもちろん、sizeof(double) でビット変数を適応させます。

于 2015-11-18T20:23:07.600 に答える