-217483648 int定数


32ビットintの表示範囲は、
-2147483648 ~ 2147483647 
ただし、VS 2008のヘッダファイルを表示するには、次の定義があります.
#define INT_MIN     (-2147483647 - 1)/* minimum (signed) int value */
なぜ直接-21748483648と定義しないのですか?
同時に私は1冊のC言語の本の中で見て、intの範囲内のすべての数字からなる値だけがint定数です.言い換えれば、0とすべての負の整数を定数と呼ぶことはできません.それは定数に対して負の演算を行ったことに相当するので、本の中の言い方では、式です.
まず、次のコードで検証します.
	cout << typeid(-2147483647-1).name() << endl;
	cout << typeid(-2147483648).name() << endl;

実行結果は次のとおりです.
int unsigned long

やはり、-2174483648は-2174483647-1とは違います.
コンパイラにとって、まず正の整数2147483648を見てから負の演算を行うことができるかどうか理解できます.2147483648はintの範囲を超えているため、-2147483648もintタイプではありません.これもシステムヘッダファイルで直接定義されていないINTです.MINのせいでしょう.