-217483648 int定数
32ビットintの表示範囲は、
-2147483648 ~ 2147483647
ただし、VS 2008のヘッダファイルを表示するには、次の定義があります.
#define INT_MIN (-2147483647 - 1)/* minimum (signed) int value */
なぜ直接-21748483648と定義しないのですか?
同時に私は1冊のC言語の本の中で見て、intの範囲内のすべての数字からなる値だけがint定数です.言い換えれば、0とすべての負の整数を定数と呼ぶことはできません.それは定数に対して負の演算を行ったことに相当するので、本の中の言い方では、式です.
まず、次のコードで検証します.
実行結果は次のとおりです.
int unsigned long
コンパイラにとって、まず正の整数2147483648を見てから負の演算を行うことができるかどうか理解できます.2147483648はintの範囲を超えているため、-2147483648もintタイプではありません.これもシステムヘッダファイルで直接定義されていないINTです.MINのせいでしょう.
-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のせいでしょう.