equalがfalseであることを意味するC ++ルールは何ですか?与えられた:
float f {-1.0};
bool equal = (static_cast<unsigned>(f) == static_cast<unsigned>(-1.0));
例:https : //godbolt.org/z/fcmx2P
#include <iostream>
int main()
{
float f {-1.0};
const float cf {-1.0};
std::cout << std::hex;
std::cout << " f" << "=" << static_cast<unsigned>(f) << '\n';
std::cout << "cf" << "=" << static_cast<unsigned>(cf) << '\n';
return 0;
}
次の出力を生成します。
f=ffffffff
cf=0
6
賛成投票をしてください:あなたは未定義の振る舞いについての忘れられがちなルールに引っかかっています!
—
バトシェバ
負の浮動小数点数を符号なしに変換するとどのような結果が予想されますか?
—
Amadeus
@Amadeusは、おそらく負の整数を変換するときに得られる通常の循環です。驚いたので、それがUBであることを確認する必要がありました。
—
AProgrammer
@アマデウス、それは違いを理解するより多くのケースでした。数週間前にタイプミスのバグを修正しました... const-floatは明示的にunsigned(バグ)にキャストされ、暗黙的にsignedに(signed functionパラメータとして)キャストされました。後で、元のバグが関数でゼロ値を引き起こしていた理由を考えました。テストは、フロートがconstだったことが原因であることを示唆しています。符号なしに明示的にキャストした後、暗黙的に同じbahaviourには至らなかったバック署名にキャスト非constフロートは-二回キャスト非constを持っていた元と期待値を。
—
GreyMattR