C/C++の(limits.h)ヘッダーとは?主なマクロと使い方を実例付きで解説
C言語には「limits.h」というヘッダーファイルが、C++では「<climits>」という名前で同じ内容のヘッダーが用意されています。これらのヘッダーには、各データ型が扱える値の上限や下限を表す多数のマクロが定義されており、変数が限界値を超える値を格納できないことを示す重要な役割を担っています。
<climits>(limits.h)で定義される主なマクロ一覧
代表的なマクロとその意味は以下の通りです。
| CHAR_BIT | char型のビット数(通常は8) |
| CHAR_MIN | char型の最小値 |
| CHAR_MAX | char型の最大値 |
| SHRT_MIN | short int型の最小値 |
| SHRT_MAX | short int型の最大値 |
| INT_MIN | int型の最小値 |
| INT_MAX | int型の最大値 |
| LONG_MIN | long int型の最小値 |
| LONG_MAX | long int型の最大値 |
| ULONG_MAX | unsigned long int型の最大値 |
これらのマクロを活用することで、環境に依存せずに各データ型の取り得る値の範囲を確認できます。移植性の高いコードを書く際に非常に便利です。
C++における<climits>の使用例
#include<iostream>
#include <bits/stdc++.h>
#include<climits>
using namespace std;
int main() {
int x = 28;
int a = CHAR_BIT*sizeof(x);
stack<bool> s;
cout << "The number is : " << x << endl;
for (int i=1; i<=a; i++) {
s.push(x%2);
x = x/2;
}
cout << "The number of bits in a byte : " << CHAR_BIT << endl;
for (int i=1; i<=a; i++) {
cout << s.top();
s.pop();
if (i % CHAR_BIT == 0)
cout << " ";
}
cout << "\n\nThe minimum value of short int :" << SHRT_MIN;
return 0;
}
実行結果
The number is : 28 The number of bits in a byte : 8 00000000 00000000 00000000 00011100 The minimum value of short int :-32768
プログラムの解説
上記のプログラムでは、<climits>ヘッダーに定義された2つのマクロを使用しています。ひとつは「CHAR_BIT」で、char型が持つビット数を表します。もうひとつは「SHRT_MIN」で、short int型が取れる最小値を表します。
この例では、CHAR_BITとsizeof演算子を掛け合わせることで、int型変数xの総ビット数を求めています。その後、スタックを使って数値28を2進数に変換し、CHAR_BITごとに空白を挿入しながら表示しています。最後にSHRT_MINを出力することで、short int型の最小値である-32768が確認できます。
-
C/C++のセグメンテーションフォルト(コアダンプ)とは?主な原因と具体例を解説
本記事では、C/C++プログラミングにおける「コアダンプ(セグメンテーションフォルト)」について、その発生原因と具体的なコード例を交えてわかりやすく解説します。 セグメンテーションフォルトとは セグメンテーションフォルト(Segmentation Fault)とは、プログラムが許可されていないメモリ領域にアクセスしようとした際に、OSがプログラムを強制終了させる現象です。実行時エラーの中でも特によく発生するもので、「core dumped(コアダンプ)」というメッセージとともに表示されることから、この名前で広く知られています。 主な発生原因としては、次のようなケースが挙げられます。 読み取
-
C/C++で学ぶAA木(AA Tree)とは?基本概念と平衡化操作を徹底解説
AA木(AA Tree)とはコンピュータサイエンスにおいて、AA木(AA Tree)とは、順序付きデータを効率的に格納・検索するために実装された平衡木(バランスドツリー)の一種です。AA木は、赤黒木(Red-Black Tree)の変種として扱われます。赤黒木は二分探索木の一形態であり、要素の追加や削除を効率的にサポートします。赤黒木と大きく異なる点は、AA木では赤いノードを右の子としてのみ追加でき、左の子としては配置できないという制約があることです。この制約により、2-3-4木ではなく2-3木をシミュレートすることになり、その結果、木の保守操作が大幅に簡素化されます。赤黒木の平衡化アルゴリズ