C# intとは?範囲・使い方・型変換・longとの違いを初心者向けに徹底解説
はじめに
C#で数値を扱うとき、最もよく使われる型のひとつがintです。
intは整数を扱うための基本的なデータ型で、年齢、個数、回数、点数、配列のインデックス、ループのカウンタなど、さまざまな場面で使われます。C#を学び始めたばかりの人にとって、intは最初に理解しておきたい重要な型です。
ただし、intには扱える数値の範囲があります。また、文字列からintへ変換する方法、longとの違い、オーバーフロー、nullの扱いなど、初心者がつまずきやすいポイントもあります。
この記事では、C#のintについて、範囲、サイズ、使い方、型変換、longとの違い、よくあるエラーまで初心者向けにわかりやすく解説します。
1. C# intとは?初心者向けにわかりやすく解説
1-1. intは整数を扱うための基本的なデータ型
C#のintは、整数を扱うためのデータ型です。
整数とは、小数点を含まない数値のことです。たとえば、次のような値はintで扱えます。
C#10
0
-5
1000
一方で、次のような小数はintではそのまま扱えません。
C#3.14
0.5
-1.25
intは、C#で数値を扱うときに非常によく使われます。特に、日常的な範囲の整数であれば、まずintを使うことが多いです。
C#int age = 25;
int count = 10;
int score = 80;
このように、intを使うと「年齢」「個数」「点数」などを簡単に表現できます。
1-2. C#のintはSystem.Int32の別名
C#のintは、実は.NETのSystem.Int32という型の別名です。
次の2つは同じ意味です。
C#int number1 = 100;
System.Int32 number2 = 100;
C#では、System.Int32を短く書けるようにintというキーワードが用意されています。
通常のC#コードでは、System.Int32よりもintを使うことが一般的です。
C#int price = 1200;
この書き方のほうが短く、読みやすいためです。
1-3. intで扱える値と扱えない値
intで扱えるのは、決められた範囲内の整数です。
C#のintで扱える範囲は、次のとおりです。
C#-2,147,483,648 ~ 2,147,483,647
この範囲内であれば、正の整数、負の整数、0を扱えます。
C#int a = 100;
int b = -200;
int c = 0;
しかし、範囲を超える値はintでは扱えません。
C#// エラーになる例
// int bigNumber = 3000000000;
3,000,000,000はintの最大値である2,147,483,647を超えているため、intには代入できません。このような大きな整数を扱う場合は、longを使います。
C#long bigNumber = 3000000000L;
また、intは小数をそのまま扱えません。
C#// エラーになる例
// int x = 3.14;
小数を扱いたい場合は、doubleやdecimalを使います。
1-4. intがよく使われる場面
C#のintは、次のような場面でよく使われます。
C#int age = 30; // 年齢
int quantity = 5; // 個数
int score = 90; // 点数
int index = 0; // 配列のインデックス
int count = 10; // 回数
特に、for文のカウンタとしてintはよく使われます。
C#for (int i = 0; i < 5; i++)
{
Console.WriteLine(i);
}
このコードでは、iというint型の変数を使って、0から4までの値を順番に表示しています。
一般的なアプリケーション開発では、通常の整数であればintで十分なことが多いです。ただし、非常に大きな数値を扱う場合はlongを検討する必要があります。
2. C# intの範囲・サイズ・初期値
2-1. intの値の範囲は-2,147,483,648〜2,147,483,647
C#のintは、次の範囲の整数を扱えます。
C#-2,147,483,648 ~ 2,147,483,647
この最小値と最大値は、次のように確認できます。
C#Console.WriteLine(int.MinValue);
Console.WriteLine(int.MaxValue);
実行結果は次のようになります。
C#-2147483648
2147483647
intは日常的な数値を扱うには十分な範囲を持っています。たとえば、年齢、個数、点数、月日、回数などは通常intで問題ありません。
しかし、人口、アクセス数、ファイルサイズ、大きなID、金額の累計など、非常に大きな値になる可能性がある場合は注意が必要です。
2-2. intのサイズは32ビット・4バイト
C#のintは、32ビットの整数型です。
32ビットは4バイトです。つまり、int型のサイズは4バイトです。
C#Console.WriteLine(sizeof(int));
実行結果は次のようになります。
C#4
intは32ビットの範囲で整数を表現するため、扱える値の範囲が決まっています。
同じ整数型でも、shortは16ビット、longは64ビットです。
C#short smallNumber = 100;
int normalNumber = 100000;
long largeNumber = 10000000000L;
数値の範囲が大きくなるほど、使用するメモリサイズも大きくなります。
2-3. intの初期値は0
C#のintの初期値は0です。
たとえば、クラスのフィールドとしてintを宣言した場合、自動的に0で初期化されます。
C#class Sample
{
int count;
public void Show()
{
Console.WriteLine(count);
}
}
この場合、countには初期値として0が入っています。
また、int配列を作成した場合も、各要素の初期値は0です。
C#int[] numbers = new int[3];
Console.WriteLine(numbers[0]);
Console.WriteLine(numbers[1]);
Console.WriteLine(numbers[2]);
実行結果は次のようになります。
C#0
0
0
ただし、メソッド内で宣言したローカル変数は、値を代入する前に使用できません。
C#void Test()
{
int number;
// エラーになる
// Console.WriteLine(number);
}
ローカル変数としてintを使う場合は、必ず使用前に値を代入しましょう。
C#void Test()
{
int number = 0;
Console.WriteLine(number);
}
2-4. int.MinValueとint.MaxValueの使い方
int.MinValueはintの最小値、int.MaxValueはintの最大値を表します。
C#Console.WriteLine(int.MinValue);
Console.WriteLine(int.MaxValue);
実行結果は次のとおりです。
C#-2147483648
2147483647
これらは、範囲チェックを行うときに便利です。
C#long value = 3000000000L;
if (value < int.MinValue || value > int.MaxValue)
{
Console.WriteLine("intの範囲外です");
}
else
{
int number = (int)value;
Console.WriteLine(number);
}
longなどの大きな型からintに変換する場合、intの範囲内に収まっているかを確認してから変換すると安全です。
2-5. 範囲を超えるとどうなる?オーバーフローの基本
intの範囲を超える計算を行うと、オーバーフローが発生することがあります。
たとえば、intの最大値に1を足すと、本来は2,147,483,648になります。しかし、この値はintの範囲を超えています。
C#int max = int.MaxValue;
int result = max + 1;
Console.WriteLine(result);
状況によっては、結果が意図しない値になることがあります。たとえば、uncheckedの状態では、最大値を超えた結果が最小値側に回り込むような動作になります。
C#unchecked
{
int max = int.MaxValue;
int result = max + 1;
Console.WriteLine(result);
}
実行結果は次のようになります。
C#-2147483648
これは、intの範囲を超えたために起こる現象です。
オーバーフローを検出したい場合は、checkedを使います。
C#checked
{
int max = int.MaxValue;
int result = max + 1;
Console.WriteLine(result);
}
この場合、実行時にOverflowExceptionが発生します。
3. C# intの基本的な使い方
3-1. int型の変数を宣言する方法
C#でint型の変数を宣言するには、次のように書きます。
C#int number;
これは「numberという名前のint型変数を用意する」という意味です。
変数名は自由に決められますが、意味がわかる名前にすることが大切です。
C#int age;
int price;
int count;
int score;
たとえば、年齢を入れる変数ならage、価格を入れる変数ならprice、個数を入れる変数ならcountのようにします。
3-2. intに値を代入する方法
int型の変数には、整数を代入できます。
C#int age;
age = 25;
宣言と同時に値を代入することもできます。
C#int age = 25;
値は後から変更できます。
C#int count = 10;
count = 20;
Console.WriteLine(count);
実行結果は次のようになります。
C#20
intは変数なので、プログラムの途中で値を変更しながら使えます。
3-3. intを使った四則演算
intでは、足し算、引き算、掛け算、割り算などの四則演算ができます。
C#int a = 10;
int b = 3;
Console.WriteLine(a + b);
Console.WriteLine(a - b);
Console.WriteLine(a * b);
Console.WriteLine(a / b);
実行結果は次のようになります。
C#13
7
30
3
ここで注意したいのは、int同士の割り算では小数点以下が切り捨てられることです。
C#int result = 10 / 3;
Console.WriteLine(result);
実行結果は次のようになります。
C#3
10 / 3は数学的には3.333...ですが、int同士の計算なので結果もintになり、小数点以下は切り捨てられます。
小数を含む結果が欲しい場合は、doubleなどを使います。
C#double result = 10.0 / 3;
Console.WriteLine(result);
3-4. intをif文やfor文で使う方法
intは、条件分岐のif文でもよく使われます。
C#int score = 80;
if (score >= 60)
{
Console.WriteLine("合格です");
}
else
{
Console.WriteLine("不合格です");
}
このコードでは、scoreが60以上かどうかを判定しています。
また、for文のカウンタとしてもintはよく使われます。
C#for (int i = 0; i < 5; i++)
{
Console.WriteLine(i);
}
実行結果は次のようになります。
C#0
1
2
3
4
for文では、繰り返し回数を管理するためにint型の変数を使うのが一般的です。
3-5. int配列・List<int>で複数の整数を扱う方法
複数の整数をまとめて扱いたい場合は、int配列やList<int>を使います。
int配列の例です。
C#int[] scores = { 80, 90, 75 };
Console.WriteLine(scores[0]);
Console.WriteLine(scores[1]);
Console.WriteLine(scores[2]);
実行結果は次のようになります。
C#80
90
75
配列の要素には、インデックスを使ってアクセスします。インデックスは0から始まります。
要素数を後から増やしたい場合は、List<int>を使うと便利です。
C#List<int> numbers = new List<int>();
numbers.Add(10);
numbers.Add(20);
numbers.Add(30);
foreach (int number in numbers)
{
Console.WriteLine(number);
}
List<int>を使うには、通常は次の名前空間を読み込みます。
C#using System.Collections.Generic;
int[]は要素数が決まっている場合に便利で、List<int>は要素数が増減する場合に便利です。
4. C# intと文字列の変換方法
4-1. stringからintに変換するint.Parse
文字列をintに変換するには、int.Parseを使います。
C#string text = "123";
int number = int.Parse(text);
Console.WriteLine(number);
実行結果は次のようになります。
C#123
int.Parseは、文字列が正しい整数の形式である場合に使えます。
C#string ageText = "25";
int age = int.Parse(ageText);
Console.WriteLine(age + 5);
実行結果は次のようになります。
C#30
文字列のままだと数値計算ではなく文字列として扱われますが、intに変換すれば計算に使えるようになります。
4-2. 変換エラーを防ぐint.TryParse
int.Parseは便利ですが、数値ではない文字列を変換しようとすると例外が発生します。
C#// エラーになる
// int number = int.Parse("abc");
安全に変換したい場合は、int.TryParseを使います。
C#string text = "123";
bool success = int.TryParse(text, out int number);
if (success)
{
Console.WriteLine("変換成功: " + number);
}
else
{
Console.WriteLine("変換できませんでした");
}
int.TryParseは、変換に成功した場合はtrue、失敗した場合はfalseを返します。
数値以外の文字列が入力される可能性がある場合は、int.Parseよりもint.TryParseを使うほうが安全です。
C#string input = "abc";
if (int.TryParse(input, out int value))
{
Console.WriteLine(value);
}
else
{
Console.WriteLine("数値を入力してください");
}
このように書けば、変換できない文字列が来てもプログラムが止まりにくくなります。
4-3. intからstringに変換するToString
intを文字列に変換するには、ToStringを使います。
C#int number = 123;
string text = number.ToString();
Console.WriteLine(text);
実行結果は次のようになります。
C#123
ToStringは、数値を画面表示や文字列結合に使いたいときに便利です。
C#int age = 25;
string message = "年齢は" + age.ToString() + "歳です";
Console.WriteLine(message);
ただし、C#では文字列とintを+で結合すると、自動的に文字列として扱われることもあります。
C#int age = 25;
string message = "年齢は" + age + "歳です";
Console.WriteLine(message);
このコードでも問題なく動作します。
また、文字列補間を使うとさらに読みやすく書けます。
C#int age = 25;
string message = $"年齢は{age}歳です";
Console.WriteLine(message);
4-4. 数値以外の文字列を変換するときの注意点
int.Parseやint.TryParseで変換できるのは、基本的に整数として解釈できる文字列です。
C#int a = int.Parse("123");
int b = int.Parse("-50");
しかし、次のような文字列は変換できません。
C#"abc"
"12.3"
"1,000"
""
" "
たとえば、"12.3"は小数なのでintには直接変換できません。
C#string text = "12.3";
if (int.TryParse(text, out int number))
{
Console.WriteLine(number);
}
else
{
Console.WriteLine("intに変換できません");
}
また、空文字や空白も変換できません。
C#string input = "";
if (!int.TryParse(input, out int value))
{
Console.WriteLine("入力が正しくありません");
}
ユーザー入力を扱う場合は、必ず変換に失敗する可能性を考慮しましょう。
4-5. 入力フォームやコンソール入力でint変換を使う例
コンソール入力では、ユーザーが入力した値は文字列として取得されます。
C#Console.Write("年齢を入力してください: ");
string input = Console.ReadLine();
int age = int.Parse(input);
Console.WriteLine($"あなたの年齢は{age}歳です");
ただし、この書き方では、ユーザーが数値以外を入力したときにエラーになります。
安全に書くなら、int.TryParseを使います。
C#Console.Write("年齢を入力してください: ");
string input = Console.ReadLine();
if (int.TryParse(input, out int age))
{
Console.WriteLine($"あなたの年齢は{age}歳です");
}
else
{
Console.WriteLine("正しい整数を入力してください");
}
入力フォームやWebアプリでも、ユーザーが必ず正しい整数を入力するとは限りません。そのため、文字列からintに変換するときは、int.TryParseを使ってエラーを防ぐのが基本です。
5. C# intの型変換とキャスト
5-1. intからlong・double・decimalへの暗黙的な型変換
intからlong、double、decimalなど、より広い範囲や異なる数値型へ変換する場合は、暗黙的な型変換ができます。
C#int number = 100;
long longNumber = number;
double doubleNumber = number;
decimal decimalNumber = number;
このように、明示的なキャストを書かなくても変換できます。
intの値はlongの範囲に必ず収まるため、安全に変換できます。
C#int count = 1000;
long totalCount = count;
このような変換は、情報が失われる可能性が低いため、C#が自動的に行ってくれます。
5-2. longやdoubleからintへの明示的なキャスト
longやdoubleからintへ変換する場合は、明示的なキャストが必要です。
C#long longNumber = 100;
int number = (int)longNumber;
longはintよりも広い範囲の整数を扱えるため、値によってはintに収まらない可能性があります。そのため、C#では自動変換されません。
C#long bigNumber = 3000000000L;
int number = (int)bigNumber;
Console.WriteLine(number);
このようなコードは、値がintの範囲を超えているため、意図しない結果になる可能性があります。
doubleからintに変換する場合も、明示的なキャストが必要です。
C#double value = 12.8;
int number = (int)value;
Console.WriteLine(number);
実行結果は次のようになります。
C#12
キャストでは、小数点以下が切り捨てられます。
5-3. 小数をintに変換すると小数点以下はどうなるか
doubleやdecimalなどの小数をintにキャストすると、小数点以下は切り捨てられます。
C#double a = 12.9;
double b = 12.1;
double c = -12.9;
Console.WriteLine((int)a);
Console.WriteLine((int)b);
Console.WriteLine((int)c);
実行結果は次のようになります。
C#12
12
-12
ここでいう切り捨ては、0に近づく方向への切り捨てです。
つまり、12.9は12になり、-12.9は-12になります。
四捨五入したい場合は、単純なキャストではなく、Math.Roundなどを使います。
C#double value = 12.9;
int rounded = (int)Math.Round(value);
Console.WriteLine(rounded);
実行結果は次のようになります。
C#13
5-4. Convert.ToInt32の使い方
Convert.ToInt32を使って、値をintに変換することもできます。
C#string text = "123";
int number = Convert.ToInt32(text);
Console.WriteLine(number);
文字列だけでなく、doubleなどからも変換できます。
C#double value = 12.8;
int number = Convert.ToInt32(value);
Console.WriteLine(number);
ただし、Convert.ToInt32で小数を変換する場合、単純な切り捨てではなく丸めが行われます。
C#Console.WriteLine(Convert.ToInt32(12.4));
Console.WriteLine(Convert.ToInt32(12.5));
Console.WriteLine(Convert.ToInt32(12.6));
結果は、キャストとは異なる場合があります。
C#12
12
13
Convert.ToInt32では、.5のようにちょうど中間の値の場合、最も近い偶数に丸められることがあります。これを理解せずに使うと、予想と違う結果になる場合があります。
5-5. キャストとConvert.ToInt32の違い
キャストとConvert.ToInt32には、いくつかの違いがあります。
まず、小数をintにする場合、キャストは小数点以下を切り捨てます。
C#double value = 12.8;
int number = (int)value;
Console.WriteLine(number);
実行結果は次のようになります。
C#12
一方、Convert.ToInt32は丸めを行います。
C#double value = 12.8;
int number = Convert.ToInt32(value);
Console.WriteLine(number);
実行結果は次のようになります。
C#13
また、nullを変換した場合の動作も異なります。
C#string text = null;
int number = Convert.ToInt32(text);
Console.WriteLine(number);
この場合、Convert.ToInt32は0を返します。
一方で、int.Parseにnullを渡すと例外が発生します。
C#// エラーになる
// int number = int.Parse(null);
文字列から安全に変換したい場合は、基本的にはint.TryParseを使うのがおすすめです。小数を整数にしたい場合は、切り捨てなのか、丸めなのかを意識して、キャスト、Convert.ToInt32、Math.Roundなどを使い分けましょう。
6. C# intとlongの違い
6-1. intとlongの範囲の違い
intとlongの大きな違いは、扱える数値の範囲です。
intの範囲は次のとおりです。
C#-2,147,483,648 ~ 2,147,483,647
一方、longの範囲は次のとおりです。
C#-9,223,372,036,854,775,808 ~ 9,223,372,036,854,775,807
longはintよりもはるかに大きな整数を扱えます。
C#int normalNumber = 2000000000;
long largeNumber = 9000000000000000000L;
longの値を書くときは、末尾にLを付けることがあります。
C#long value = 3000000000L;
Lを付けることで、その数値リテラルがlongであることを明示できます。
6-2. intとlongのサイズの違い
intは32ビット、longは64ビットの整数型です。
C#Console.WriteLine(sizeof(int));
Console.WriteLine(sizeof(long));
実行結果は次のようになります。
C#4
8
intは4バイト、longは8バイトです。
つまり、longはintの2倍のメモリサイズを使います。
通常のアプリケーションでは、この差を過度に気にする必要はありません。ただし、大量の数値データを配列などで扱う場合は、メモリ使用量に影響することがあります。
C#int[] intArray = new int[1000000];
long[] longArray = new long[1000000];
この場合、long配列はint配列よりも多くのメモリを使います。
6-3. intとlongの使い分け方
基本的には、通常の整数であればintを使うことが多いです。
C#int age = 30;
int count = 100;
int score = 85;
一方で、intの範囲を超える可能性がある場合はlongを使います。
C#long totalAccessCount = 5000000000L;
long fileSize = 10000000000L;
使い分けの目安は次のとおりです。
日常的な数値や小さな範囲の整数を扱う場合はintで十分です。非常に大きな値、累計値、ID、ファイルサイズ、アクセス数などを扱う場合はlongを検討します。
また、APIやデータベースの型に合わせることも重要です。データベース側がBIGINTであれば、C#側ではlongを使うことが多いです。
6-4. 大きな数値を扱うならlongを使うべきケース
次のようなケースでは、intではなくlongを使うことを検討しましょう。
C#long userId = 3000000000L;
long totalSales = 5000000000L;
long fileSizeBytes = 10000000000L;
long totalAccess = 8000000000L;
たとえば、ユーザーIDや注文IDが非常に大きくなるシステムでは、intでは足りなくなる可能性があります。
C#long orderId = 9876543210L;
また、ファイルサイズをバイト単位で扱う場合も、intの範囲を超えることがあります。
C#long fileSize = 5L * 1024 * 1024 * 1024;
Console.WriteLine(fileSize);
このコードでは、5GBをバイト数で表しています。GB単位のファイルサイズはintの範囲を超えることがあるため、longが適しています。
6-5. intとlongを混在させるときの注意点
intとlongを一緒に計算すると、結果は基本的にlongになります。
C#int a = 10;
long b = 20;
long result = a + b;
このコードは問題ありません。
しかし、結果をintに入れようとするとエラーになります。
C#int a = 10;
long b = 20;
// エラーになる
// int result = a + b;
a + bの結果はlongになるため、intに代入するには明示的なキャストが必要です。
C#int result = (int)(a + b);
ただし、longの値がintの範囲を超えている場合、キャストすると意図しない値になる可能性があります。
C#long big = 3000000000L;
int number = (int)big;
Console.WriteLine(number);
intとlongを混在させる場合は、最終的な型が何になるのか、値がintの範囲に収まるのかを確認しましょう。
7. C# intでよくあるエラーと注意点
7-1. 「値が大きすぎる」コンパイルエラーの原因
intに範囲外の値を代入しようとすると、コンパイルエラーになります。
C#// エラーになる
// int number = 3000000000;
3,000,000,000はintの最大値である2,147,483,647を超えているためです。
このような場合は、longを使います。
C#long number = 3000000000L;
longの数値リテラルには、末尾にLを付けるとわかりやすくなります。
C#long population = 8000000000L;
大きな数値を扱う可能性がある場合は、最初からlongを使うことでエラーやオーバーフローを防ぎやすくなります。
7-2. オーバーフローによる意図しない計算結果
intの計算結果が範囲を超えると、オーバーフローによって意図しない値になることがあります。
C#unchecked
{
int max = int.MaxValue;
int result = max + 1;
Console.WriteLine(result);
}
実行結果は次のようになります。
C#-2147483648
最大値に1を足したのに、結果が負の数になっています。これは、intの範囲を超えて値が回り込んだためです。
このような問題は、金額や個数、累計値などを扱う処理で特に注意が必要です。
C#int price = 2000000000;
int quantity = 2;
unchecked
{
int total = price * quantity;
Console.WriteLine(total);
}
この計算はintの範囲を超えるため、正しい結果にならない可能性があります。
大きな計算を行う場合は、longを使うと安全です。
C#long price = 2000000000L;
long quantity = 2;
long total = price * quantity;
Console.WriteLine(total);
7-3. checkedとuncheckedでオーバーフローを制御する方法
C#では、checkedとuncheckedを使ってオーバーフローの扱いを制御できます。
checkedを使うと、オーバーフローが発生したときに例外が発生します。
C#try
{
checked
{
int max = int.MaxValue;
int result = max + 1;
Console.WriteLine(result);
}
}
catch (OverflowException)
{
Console.WriteLine("オーバーフローが発生しました");
}
このコードでは、int.MaxValue + 1がintの範囲を超えるため、OverflowExceptionが発生します。
一方、uncheckedを使うと、オーバーフローしても例外は発生せず、値が回り込みます。
C#unchecked
{
int max = int.MaxValue;
int result = max + 1;
Console.WriteLine(result);
}
実行結果は次のようになります。
C#-2147483648
安全性を重視する処理ではcheckedを使うと、オーバーフローに早く気づけます。
7-4. 0除算で発生するDivideByZeroException
intを0で割ると、DivideByZeroExceptionが発生します。
C#int a = 10;
int b = 0;
// エラーになる
// int result = a / b;
0で割ることは数学的に定義できないため、C#でも例外になります。
安全に割り算を行うには、割る数が0でないか確認しましょう。
C#int a = 10;
int b = 0;
if (b != 0)
{
int result = a / b;
Console.WriteLine(result);
}
else
{
Console.WriteLine("0で割ることはできません");
}
ユーザー入力や外部データを使って割り算する場合は、0が入る可能性を考えておくことが重要です。
7-5. nullを代入したい場合はint?を使う
通常のintにはnullを代入できません。
C#// エラーになる
// int number = null;
intは値型なので、必ず何らかの整数値を持ちます。
nullを扱いたい場合は、Nullable型であるint?を使います。
C#int? number = null;
int?は、整数またはnullを表せる型です。
C#int? age = null;
if (age.HasValue)
{
Console.WriteLine(age.Value);
}
else
{
Console.WriteLine("年齢は未設定です");
}
また、??演算子を使うと、nullの場合の初期値を指定できます。
C#int? age = null;
int displayAge = age ?? 0;
Console.WriteLine(displayAge);
この場合、ageがnullなら0が使われます。
データベースのNULL値や、入力されていない値を扱う場合は、int?を使うと便利です。
8. C# intを使う実践コード例
8-1. 年齢や個数をintで管理する例
intは、年齢や個数の管理に適しています。
C#int age = 28;
int itemCount = 3;
Console.WriteLine($"年齢: {age}歳");
Console.WriteLine($"商品数: {itemCount}個");
実行結果は次のようになります。
C#年齢: 28歳
商品数: 3個
商品の合計金額を計算する場合にもintを使えます。
C#int price = 1200;
int quantity = 3;
int total = price * quantity;
Console.WriteLine($"合計金額: {total}円");
実行結果は次のようになります。
C#合計金額: 3600円
ただし、金額が非常に大きくなる可能性がある場合は、longやdecimalも検討しましょう。
8-2. for文のカウンタとしてintを使う例
for文では、intをカウンタとしてよく使います。
C#for (int i = 1; i <= 5; i++)
{
Console.WriteLine($"{i}回目の処理です");
}
実行結果は次のようになります。
C#1回目の処理です
2回目の処理です
3回目の処理です
4回目の処理です
5回目の処理です
配列の要素を順番に処理するときにも、intのカウンタが使えます。
C#int[] scores = { 80, 90, 75 };
for (int i = 0; i < scores.Length; i++)
{
Console.WriteLine($"{i + 1}人目の点数: {scores[i]}");
}
配列のインデックスは0から始まるため、i = 0から開始するのが一般的です。
8-3. ユーザー入力をintに変換して計算する例
ユーザーが入力した文字列をintに変換し、計算に使う例です。
C#Console.Write("商品の価格を入力してください: ");
string priceText = Console.ReadLine();
Console.Write("個数を入力してください: ");
string quantityText = Console.ReadLine();
if (int.TryParse(priceText, out int price) &&
int.TryParse(quantityText, out int quantity))
{
int total = price * quantity;
Console.WriteLine($"合計金額は{total}円です");
}
else
{
Console.WriteLine("価格と個数は整数で入力してください");
}
int.TryParseを使うことで、数値以外の文字列が入力された場合でも安全に処理できます。
入力値を扱うプログラムでは、int.Parseよりもint.TryParseを使うほうが実用的です。
8-4. intの範囲チェックを行う例
longの値をintに変換する前に、範囲チェックを行う例です。
C#long value = 3000000000L;
if (value < int.MinValue || value > int.MaxValue)
{
Console.WriteLine("intの範囲外です");
}
else
{
int number = (int)value;
Console.WriteLine($"変換結果: {number}");
}
このコードでは、valueがintの範囲に収まるか確認しています。
範囲外の値を無理にintへキャストすると、意図しない結果になる可能性があります。安全なコードを書くためには、変換前に範囲チェックを行うことが大切です。
8-5. intとlongを使い分ける例
通常の数値にはintを使い、大きな数値にはlongを使う例です。
C#int age = 35;
int itemCount = 10;
long totalAccessCount = 5000000000L;
long fileSizeBytes = 8000000000L;
Console.WriteLine($"年齢: {age}");
Console.WriteLine($"商品数: {itemCount}");
Console.WriteLine($"総アクセス数: {totalAccessCount}");
Console.WriteLine($"ファイルサイズ: {fileSizeBytes}バイト");
ageやitemCountのように小さな整数はintで十分です。
一方、totalAccessCountやfileSizeBytesのように大きな値になる可能性があるものはlongを使います。
このように、値の性質に応じてintとlongを使い分けることで、わかりやすく安全なコードになります。
9. C# intに関するよくある質問
9-1. C#のintとIntegerは同じ?
C#では、基本的にIntegerというキーワードは使いません。
C#で整数を表す基本的な型はintです。
C#int number = 100;
一方、IntegerはVisual Basicなどで使われる型名です。
C#でIntegerと書いても、通常はそのままでは使えません。C#ではintまたはSystem.Int32を使います。
C#int a = 10;
System.Int32 b = 20;
C#を学ぶ場合は、整数型の基本はintと覚えておけば問題ありません。
9-2. intとInt32はどちらを使うべき?
C#では、通常はintを使うのがおすすめです。
intとSystem.Int32は同じ型を表します。
C#int a = 10;
System.Int32 b = 20;
どちらも32ビット整数です。
ただし、一般的なC#コードではintのほうがよく使われます。
C#int count = 100;
System.Int32は、.NETの型名を明示したい場合や、リフレクション、型情報を扱う場面などで見ることがあります。
初心者のうちは、通常の変数宣言ではintを使えば問題ありません。
9-3. intに小数は入れられる?
intに小数はそのまま入れられません。
C#// エラーになる
// int number = 3.14;
intは整数専用の型なので、小数を扱う場合はdoubleやdecimalを使います。
C#double pi = 3.14;
decimal price = 123.45m;
小数をintに変換したい場合は、キャストや変換メソッドを使います。
C#double value = 3.14;
int number = (int)value;
Console.WriteLine(number);
実行結果は次のようになります。
C#3
キャストでは小数点以下が切り捨てられます。
9-4. intにnullを入れる方法は?
通常のintにはnullを入れられません。
C#// エラーになる
// int number = null;
nullを入れたい場合は、int?を使います。
C#int? number = null;
int?は、intの値またはnullを持てる型です。
C#int? score = null;
if (score == null)
{
Console.WriteLine("点数は未入力です");
}
else
{
Console.WriteLine($"点数は{score}です");
}
データが未入力の場合や、データベースのNULLを扱う場合には、int?がよく使われます。
9-5. int・long・short・byteの違いは?
int、long、short、byteはいずれも整数を扱う型ですが、扱える範囲とサイズが異なります。
byteは0から255までの整数を扱えます。サイズは1バイトです。
C#byte b = 255;
shortはintより小さい範囲の整数を扱います。サイズは2バイトです。
C#short s = 30000;
intは最もよく使われる整数型で、サイズは4バイトです。
C#int i = 100000;
longは非常に大きな整数を扱える型で、サイズは8バイトです。
C#long l = 10000000000L;
使い分けの基本は、通常の整数ならint、大きな整数ならlongです。shortやbyteは、メモリ使用量を細かく意識する場合や、バイナリデータ、通信データなどを扱う場合に使われます。
まとめ
C#のintは、整数を扱うための基本的なデータ型です。
intはSystem.Int32の別名で、32ビット、4バイトの整数型です。扱える範囲は-2,147,483,648から2,147,483,647までです。
C#int number = 100;
年齢、個数、点数、回数、配列のインデックス、for文のカウンタなど、C#のプログラミングでは非常に多くの場面でintが使われます。
文字列からintへ変換する場合は、int.Parseやint.TryParseを使います。特に、ユーザー入力のように正しい数値が入るとは限らない場合は、int.TryParseを使うと安全です。
C#if (int.TryParse("123", out int value))
{
Console.WriteLine(value);
}
intからlongやdoubleへは暗黙的に変換できますが、longやdoubleからintへ変換する場合は、明示的なキャストが必要です。
C#long bigNumber = 100;
int number = (int)bigNumber;
また、intの範囲を超えるとオーバーフローが発生する可能性があります。大きな数値を扱う場合は、longを使うことを検討しましょう。
C#long largeNumber = 3000000000L;
通常の整数にはint、非常に大きな整数にはlong、小数にはdoubleやdecimal、nullを扱いたい整数にはint?を使うと覚えておくと、C#の数値型を使い分けやすくなります。

