導入
intは「約±21億まで」の整数型です。もっと大きい数や、1バイト単位のデータ、1文字を扱うときは、intの仲間であるlong・byte・charなどを使い分けます。あわせて、型の上限を超えたとき起こる**オーバーフロー(桁あふれ)**という初心者がハマりやすい落とし穴も押さえます。
図解
flowchart TB
N["整数型の仲間"] --> B["byte<br/>0〜255(1バイト)"]
N --> I["int<br/>約 ±21億(4バイト・標準)"]
N --> L["long<br/>約 ±922京(8バイト・巨大な数)"]
N --> C["char<br/>1文字(内部は文字コード番号)"]
style I fill:#e1f5fe
サンプル
long big = 9_000_000_000; // int の上限(約21億)を超える大きな整数。_ は桁区切り(無視される)
byte small = 255; // 0〜255 だけを表す1バイトの型
char letter = 'A'; // 1文字。文字は '' で囲む("" は文字列)
Console.WriteLine(big); // 9000000000
Console.WriteLine(small); // 255
Console.WriteLine(letter); // A
Console.WriteLine((int)letter); // 65 ← 文字は内部に「文字コード番号」を持つ
// オーバーフロー: 型の上限を超えると、値がぐるっと一周してしまう
int max = int.MaxValue; // 2147483647(intの最大値)
Console.WriteLine(max + 1); // -2147483648 ← あふれて最小値に戻る(バグの温床)
// checked を付けると、あふれた瞬間に例外で気づける
try
{
int bad = checked(max + 1);
}
catch (OverflowException)
{
Console.WriteLine("あふれました"); // こちらが出力される
}
longはintより桁数の大きい整数、byteは0〜255の小さな整数、charは1文字(''で囲む)- 数値リテラルは
9_000_000_000のように_で桁区切りできる(読みやすさのためで値には影響しない) - 型の上限を超えるとオーバーフローで値が一周する。既定では例外にならず静かに壊れる
checked(...)で囲むと、あふれた瞬間にOverflowExceptionで知らせてくれる
演習
// TODO: 100万 × 100万 を計算して出力してください。
// int 同士だとオーバーフローで壊れるので、long で正しく計算します(答えは 1000000000000)
___
- 期待される出力:
1000000000000
ヒント1を見る
1_000_000 * 1_000_000 は int 同士なのであふれます。片方を(long)にキャストしてから掛けます
ヒント2を見る
long result = (long)1_000_000 * 1_000_000; Console.WriteLine(result);
まとめ
intの仲間にlong(巨大な数)・byte(0〜255)・char(1文字)がある- 型の上限を超えるとオーバーフローで値が一周する(既定では例外にならない)
- 大きくなりうる計算は
longで受ける/危険な箇所はcheckedで守る
次回: 数値を計算する「算術演算子」を使います。