私は次のコードの断片と困惑している:浮動小数点逆バイナリ表現
int main()
{
std::cout << std::bitset<32>(10.0f) << std::endl;
std::cout << std::bitset<32>(-10.0f) << std::endl;
float x = 10.0f;
std::bitset<32> bsx(x);
float y = -10.0f;
std::bitset<32> bsy(y);
std::cout << bsx << std::endl;
std::cout << bsy << std::endl;
}
ちょうど秒1(はい、それだけで切り捨て最初のものです):私は「
int main()
{
std::cout << std::bitset<32>(10.0f) << std::endl;
std::cout << std::bitset<32>(-10.0f) << std::endl;
}
第二
00000000000000000000000000001010
00000000000000000000000000000000
00000000000000000000000000001010
11111111111111111111111111110110
: 第一1:メートル以下の出力を得る
00000000000000000000000000001010
00000000000000010010000001101000
システムはmacOS Sierra(10.12.3)でClang 4.0.0ですが、浮動小数点数はここでは32ビットです。 (g++ -pedantic -std=c++14
でコンパイル。)
私は浮動小数点数のための承知している唯一のものは、IEEE-754、個別の符号ビットがなければならないと述べています。最初のプログラムの最後の出力は...ただでさえ切り捨て同じコード、と..すべてゼロとややランダム出力を2の補数...
そして、他のものがちょうど完全に混乱しているを使用しているように見える
私は何を誤解していますか?コードのどこかで未定義の動作が発生していますか?構文を理解していないのですか?何らかの理由で浮動小数点数をビットセットとして表現できないのですか?
'std :: bitset'は浮動小数点を取るctorを持っていないので暗黙的に変換しています – harold
' std :: bitset'のドキュメントを読んだことはありますか? –