-2147483648は、32ビットの整数型の最小の整数ですが、次のif(...)
文でオーバーフローするようです。
if (-2147483648 > 0)
std::cout << "true";
else
std::cout << "false";
これは私のテストで印刷true
されます。ただし、-2147483648を整数にキャストすると、結果は異なります。
if (int(-2147483648) > 0)
std::cout << "true";
else
std::cout << "false";
これは印刷されますfalse
。
よくわかりません。誰かがこれについて説明できますか?
2012年2月5日更新:
コメントありがとうございます。私のコンパイラでは、intのサイズは4バイトです。私はいくつかの簡単なテストにVCを使用しています。質問の説明を変更しました。
これは、この投稿で非常に良い回答がたくさんあります。AndreyTは、コンパイラがそのような入力でどのように動作するか、およびこの最小整数がどのように実装されたかについて、非常に詳細な説明をしました。一方、 qPCR4virは、いくつかの関連する「好奇心」と整数の表現方法を示しました。とても印象的です!