質問: +0.0` なわけですが・・・
回答: JIS X 3014:2003 ( [c++](/questions/tagged/c%2b%2b "'c++' のタグが付いた質問を表示") 言語規格書) にて > > 3.9 型 > > 4項の注釈 *37 > > この規定は [c++](/questions/tagged/c%2b%2b "'c++' のタグが付いた質問を表示") のメモリモデルを JIS X 3010 と互換にすることを意図している > > > という文書を見つけたので JIS X 3010 を読んでみました。 JIS X 3010:2003 ( [c](/questions/tagged/c "'c' のタグが付いた質問を表示") 言語規格書) にて次の解説を見つけました。部分引用します。 > > 6.2.6.2 整数型 > > 符号ビットが1ですべての値ビットが0である数(符号と絶対値若しくは2の補数の場合)、 > > または符号ビットが1ですべての値ビットが1である値(1の補数の場合) > > が、トラップ表現であるか又は通常の値であるかも処理系定義とする。 > > > [符号と絶対値または1の補数の場合] この表現が通常の値であるならば、これを負の0と呼ぶ。 > > > [処理系が負の0をサポートする場合に、演算が] > > 実際に負の0を生成するか、又は通常の0を生成するかは未規定とする。 > > 負の0がオブジェクトに格納されるとき通常の0になるかどうかも未規定とする。 > > > [処理系が負の0をサポートしない場合] 負の0を生成する演算の結果は未定義とする。 > > > (これらに相当する解説を JIS X 3014:2003 中で見つけることができませんでした) ( [c++11](/questions/tagged/c%2b%2b11 "'c++11' のタグが付いた質問を表示") や [c++14](/questions/tagged/c%2b%2b14 "'c++14' のタグが付いた質問を表示") には解説あるのでしょうか?) そもそも負の0がトラップ表現や未定義になるのであれば「使っちゃいけない」のであって、 比較すること以前の問題なようです。 実在する1の補数を使う処理系 ([c](/questions/tagged/c "'c' のタグが付いた質問を表示") が実装されているかはおいといて) では 整数型の一致比較は既に回答のあるとおり「ビットパターンの一致比較」で実装されていると思うので `-0 != +0` は真 `-0 == +0` は偽、と考えてほぼ間違いないようです。 `-0 < +0` はこれだけだと微妙ですが符号ビットが違うので真になると期待したいところです。 (「未定義」の動作の中には「プログラマが勝手に期待するとおりの動作」も含まれますし) まあ今時1の補数を使う処理系がどれだけ存在するか、実用されるかは定かではありませんが。 オイラも実用したことはありませんし コンピュータ内では2の補数が使われていますか1の補数が使われていますか