C/C++においてINT_MAXとINT_MINを使用する
この記事では、C/C++でINT_MAXとINT_MINを使用する方法について見ていきます。
実際に役立つ最大および最小の整数値を表すマクロです。 (Jissai ni yakudatsu saidai oyobi saishō no seisu-chi o arawasu makuro desu.)
いくつかの例を使って、それを見てみましょう。
INT_MAXとINT_MINを使用する
INT_MAXは、最大の整数値を表すマクロです。同様に、INT_MINは最小の整数値を表します。
これらのマクロはヘッダファイルに定義されているので、それをインクルードする必要があります。
#include <limits.h>
INT_MAX
INT_MIN
整数型の変数は、INT_MINとINT_MAXの間にある必要があります。
通常、整数は4バイト(32ビット)として保存されます。
これはほとんどすべての機械において、最大の整数値は2^(31) – 1 = +2147483647になることを意味します。
最小の整数値は-(2^31) = -2147483648となります。
私たちの機械でこれを検証しましょう。
#include <stdio.h>
#include <limits.h>
int main() {
printf("Maximum Integer Value: %d\n", INT_MAX);
printf("Minimum Integer Value: %d\n", INT_MIN);
return 0;
}
出力
Maximum Integer Value: 2147483647
Minimum Integer Value: -2147483648
実際に、予測通りの結果を得る。 (Jissai ni, yosoku doori no kekka o eru.)
では、もう1つ別の例を挙げて、整数のオーバーフローやアンダーフローを正しく予測しましょう。
#include <stdio.h>
#include <limits.h>
int main() {
int value = 0;
while (value >= 0) {
// Check for overflow
if (value == INT_MAX) {
printf("value = %d. Possible overflow!\n", value);
}
value ++;
}
printf("Now, value = %d\n", value);
value = 0;
while (value <= 0) {
// Check for underflow
if (value == INT_MIN) {
printf("value = %d. Possible underflow!\n", value);
}
value --;
}
printf("Now, value = %d\n", value);
return 0;
}
出力
value = 2147483647. Possible overflow!
Now, value = -2147483648
value = -2147483648. Possible underflow!
Now, value = 2147483647
これは実行に数秒ほどかかりますが、私たちが期待するとおりの結果を実現します。
整数はINT_MINにオーバーフローし、INT_MAXにアンダーフローします。
値の変動を検出するのに役立つ。
なぜこれらのマクロが必要なのですか? (Naze korera no makuro ga hitsuyōna nodesu ka?)
特定のアルゴリズムでは、時々変数を最小値/最大値として初期化する必要があります。
データ型のビット数は、マシンによって異なる場合があります。
最大/最小値の使用が一貫したものになるようにするため、皆が同じマクロを使用できれば便利です!
これがまさに、このようなマクロが存在する理由なのです。
- To spare you from remember the actual values
- Have consistent programming patterns across all machines
- Very convenient to use
あなたが自分のC/C++ライブラリを構築する際に、このようなマクロを使用する理由があなたを説得するかもしれません。
結論
この記事では、C / C++でINT_MAXおよびINT_MINマクロを使用する方法について学びました。
同様の内容については、当社のCプログラミングのチュートリアルセクションをぜひご覧ください。
参考文献
- cplusplus.com page on climits