C++のintとlongの違いとは?サイズ・範囲・使い分けを徹底解説
はじめに
C++には整数を扱うためのデータ型が複数用意されており、その中でも特によく使われるのが「int」と「long」です。どちらも整数値を格納できますが、メモリサイズや扱える数値の範囲が異なります。本記事では、それぞれの特徴と具体的なコード例、そして両者の違いについてわかりやすく解説します。
int型とは
int型は整数値を格納するための基本的なデータ型です。符号付き(signed)と符号なし(unsigned)の両方があり、一般的な環境では32ビット(4バイト)です。long型と比べて必要なメモリ領域が小さく、日常的な整数処理で最も広く使われています。変数を宣言する際はキーワード「int」を使用します。
int型の宣言構文は以下の通りです。
int 変数名;
ここで、「変数名」にはユーザーが任意に付けた名前が入ります。
サンプルコード
#include <iostream>
using namespace std;
int main() {
int a = 8;
int b = 10;
int c = a + b;
cout << "The value of c : " << c;
return 0;
}
実行結果
The value of c : 18
long型とは
long型は、より大きな範囲の整数値を格納するためのデータ型です。こちらも符号付き・符号なしの両方が利用でき、多くの環境では64ビット(8バイト)です。int型よりも多くのメモリ領域を必要としますが、その分、非常に大きな数値を扱うことができます。変数の宣言にはキーワード「long」を使用します。
long型の宣言構文は以下の通りです。
long 変数名;
サンプルコード
#include <iostream>
using namespace std;
int main() {
int a = 8;
long b = 28;
long c = long(a + b);
cout << "The value of c : " << c;
return 0;
}
実行結果
The value of c : 36
intとlongの主な違い
| 項目 | int | long |
|---|---|---|
| サイズ | 32ビット(4バイト) | 64ビット(8バイト) |
| 扱える範囲(符号付き) | -2,147,483,648 ~ 2,147,483,647 | -9,223,372,036,854,775,808 ~ 9,223,372,036,854,775,807 |
| メモリ使用量 | 少ない | 多い |
| 主な用途 | 一般的な整数計算 | 非常に大きな数値の処理 |
注意点:環境によるサイズの違い
実際のサイズは処理系(OSやコンパイラ)によって異なる場合があります。たとえばLinuxやmacOSではlongが64ビットですが、Windowsではlongが32ビットとして定義されている点に注意が必要です。特定のサイズを保証したい場合は、<cstdint>ヘッダーのint32_tやint64_tといった固定幅整数型を使用するのが安全です。
まとめ
intとlongはどちらも整数を扱うデータ型ですが、longはより大きな数値を格納できる一方で、メモリを多く消費します。通常の計算にはintを、intの範囲(約21億)を超える可能性がある値にはlongを選ぶとよいでしょう。用途に応じて適切な型を使い分けることで、効率的かつ安全なプログラムを作成できます。
-
【C/C++】const int*、const int* const、int const* の違いをわかりやすく解説
C言語やC++では、ポインタとconst修飾子の組み合わせ方によって、複数の異なる変数宣言が存在します。「const int*」「const int* const」「int const*」など、一見よく似たこれらの宣言の違いを正確に理解することは、安全でバグの少ないコードを書くうえで非常に重要です。本記事では、これら3つの宣言の違いを、複雑な宣言を読み解く際に役立つ「時計回り/らせんルール(Clockwise/Spiral Rule)」にも触れながら、コード例とともに分かりやすく解説します。時計回り/らせんルールとは宣言の中心にある識別子から出発し、時計回りに記号をなぞっていくことで、cons
-
C#のintとInt32の違いとは?エイリアスの仕組みと使い分けを解説
C#では、32ビット整数を扱う方法として「int」と「Int32」の2つの記述があります。一見すると別々の型のように見えますが、実は本質的な違いはほとんどありません。intとInt32の基本的な関係Int32は.NETフレームワークが提供する構造体(System.Int32)であり、intはC#言語においてInt32に付けられたエイリアス(別名)です。Int32 x = 5;int x = 5;上記の2つの宣言は、どちらも同じ32ビット整数を保持します。コンパイルされた結果は完全に同一のコードになるため、実行時のパフォーマンスや動作に一切の違いはありません。唯一の小さな違いわずかな違いとして、