-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を使用しています。質問の説明を変更しました。
すなわち、この記事では非常に良いreplysがたくさんだ、AndreyTは非常に詳細な入力にどのようにコンパイラの意志行動に説明し、どのようにこの最小の整数が実装されましたを与えました。一方、qPCR4virは、いくつかの関連する「好奇心」と、整数の表現方法を提供しました。とても印象的です!
INT_MIN
では-9223372036854775808
、CHAR_BIT
16の場合、aが存在する可能性があります。Cは2の補数を必要としないため、CHAR_BIT == 8
and sizeof(int
== 4) `を使用しても取得でき-9223372036854775807
ます。