-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_BIT16の場合、aが存在する可能性があります。Cは2の補数を必要としないため、CHAR_BIT == 8and sizeof(int== 4) `を使用しても取得でき-9223372036854775807ます。