C#プログラミングにおいて、long型は非常に重要なデータ型の一つです。しかし、初心者にとってはその使い方や仕様がわかりづらいこともあります。
そこで本記事では、long型の基本的な使い方から応用的な使い方までを詳しく解説します。
long型とは
long型は、整数を扱うためのデータ型の一つで、64ビットの符号付き整数を表します。C#では、int型が32ビットの符号付き整数を表すのに対して、long型は64ビットの符号付き整数を表します。
long型は、int型よりも大きな値を扱うことができます。ただし、メモリ使用量が増えるため、必要以上に大きな値を扱う必要がない場合はint型を使った方が効率的です。
以下にlong型の宣言方法と初期化方法を示します。
// long型変数num1を宣言し、0で初期化する
long num1 = 0;
// long型変数num2を宣言し、10000000000で初期化する
long num2 = 10000000000;
また、long型にはLサフィックス(接尾辞)を付けることで明示的に指定することもできます。
// long型変数num3を宣言し、0で初期化する(Lサフィックス使用)
long num3 = 0L;
// long型変数num4を宣言し、10000000000で初期化する(Lサフィックス使用)
long num4 = 10000000000L;
long型の特徴
long型は、整数を扱うためのデータ型の一つであり、int型よりも大きな値を扱うことができます。
long型は、64ビットの符号付き整数で、これは-9,223,372,036,854,775,808から9,223,372,036,854,775,807までの範囲の数値を表せるデータ量になります。 例えば、以下のように宣言することができます。
long number = 1234567890123456789;
このように、int型では表現しきれない大きな値を扱う場合には、long型を使用します。
long型の宣言方法
long型は、整数を扱うためのデータ型の一つです。C#でlong型を宣言する方法は以下の通りです。
long num1 = 1234567890L;
上記のように、変数名の前にlong
というキーワードを付けて宣言します。また、値を代入する場合は、整数リテラルにL
もしくはl
を付ける必要があります。
long num2 = 9876543210L;
L
もしくはl
を忘れてしまうと、int型整数をlong型変数に代入する処理になりますが、int型で扱えない大きさの数値を指定した場合、オーバーフローした後の値が代入されてしまいます。なのでロング型の値を扱う場合は必ずL
l
をつけるようにしましょう。
なお、C#ではint型と同様に、var
キーワードを使って暗黙的に型推論することもできます。
var num3 = 1234567890L;
ただし、この場合はリテラルにL
もしくはl
をつけないとint型であると推論されるので気をつけましょう。
long型の演算
long型は整数型の一つであり、四則演算や比較演算などが可能です。以下に、long型の演算について説明します。
四則演算
long型同士の加減乗除は、int型と同様に行うことができます。ただし、オーバーフロー(桁あふれ)に注意する必要があります。
long a = 10000000000L;
long b = 20000000000L;
long c = a + b; // オーバーフローが発生するため、正しい結果が得られない
上記の例では、aとbを足した結果cは正しく計算されません。これは、aとbの値がlong型で表現可能な最大値を超えたためです。このような場合は、checkedキーワードを使用してオーバーフローを検出することができます。
long a = 10000000000L;
long b = 20000000000L;
checked
{
long c = a + b; // System.OverflowException例外が発生する
}
比較演算
long型同士の比較演算も行うことができます。以下は比較演算子の一覧です。
比較演算子 | 説明 |
---|---|
== | 左辺と右辺が等しい場合にtrueを返す |
!= | 左辺と右辺が異なる場合にtrueを返す |
< | 左辺が右辺より小さい場合にtrueを返す |
> | 左辺が右辺より大きい場合にtrueを返す |
<= | 左辺が右辺以下の場合にtrueを返す |
>= | 左辺が右辺以上の場合にtrueを返す |
long a = 10;
long b = 20;
bool result1 = (a == b); // false
bool result2 = (a != b); // true
bool result3 = (a < b); // true
bool result4 = (a > b); // false
bool result5 = (a <= b); // true
bool result6 = (a >= b); // false
前置・後置インクリメント・デクリメント
前置・後置インクリメント・デクリメントも使用可能です。
long a = 10;
// 前置インクリメント(++a)
Console.WriteLine(++a); // 出力結果:11
// 後置インクリメント(a++)
Console.WriteLine(a++); // 出力結果:11
// 前置デクリメント(--a)
Console.WriteLine(--a); // 出力結果:10
// 後置デクリメント(a--)
Console.WriteLine(a--); // 出力結果:10
long型の配列
long型の配列とは、複数のlong型の変数をまとめたものです。配列を使うことで、同じ種類のデータを効率的に扱うことができます。
配列の宣言方法
long型の配列を宣言するには、以下のようにします。
long[] numbers = new long[5];
上記の例では、長さが5のlong型の配列numbers
を宣言しています。この配列には、0から4までのインデックスがあります。
配列への値の代入
配列に値を代入するには、以下のようにします。
numbers[0] = 10L;
numbers[1] = 20L;
numbers[2] = 30L;
numbers[3] = 40L;
numbers[4] = 50L;
上記の例では、先ほど宣言したnumbers
配列に対して、それぞれインデックス番号0から4までに値を代入しています。
配列から値を取得する
配列から値を取得する場合は、以下のようにします。
Console.WriteLine(numbers[2]);
上記の例では、numbers
配列からインデックス番号2(つまり30)を取得し、コンソール上に表示しています。
配列要素数
また、配列要素数(長さ)は以下のように取得できます。
Console.WriteLine(numbers.Length);
上記コードでは、numbers
配列要素数(長さ)が5であることがわかります。
long型の注意点
long型は、整数を扱うためのデータ型ですが、注意点がいくつかあります。以下にその注意点を説明します。
1. オーバーフローに注意する
long型は64ビットの符号付き整数を扱うことができますが、その範囲には限界があります。
もし、その範囲を超える値を代入した場合、オーバーフロー(桁あふれ)が発生します。
オーバーフローが発生すると、予期せぬ結果になる可能性があるため、注意が必要です。 例えば、以下のようなコードではオーバーフローが発生します。
long num = 9223372036854775807L;
num = num + 1;
この場合、num
変数には9223372036854775807
という最大値が代入されています。しかし、次の行でnum
変数に1を加算しています。この結果、num
変数には-9223372036854775808
という負の値が代入されてしまいます。
2. 整数リテラルの表記方法
long型の整数リテラルは末尾にL
またはl
を付ける必要があります。これを忘れるとオーバーフローが発生したint型整数になってしまう可能性があるので気をつけましょう。
// 正しい例
long num1 = 1234567890L;
long num2 = -9876543210l;
// 間違った例(コンパイルエラー)
long num3 = 1234567890;
3. 比較演算子の使い方
long型同士の比較演算子(<, >, <=, >=)を使用する場合は、==
や!=
と一緒に使わないように気をつけましょう。
// 間違った例
if (num1 < num2 == false) { ... }
// 正しい例
if (num1 < num2) { ... }
if (num1 >= num2) { ... }
if ((num1 < num2) == false) { ... }
上記のような書き方だと意図しない結果になってしまう可能性があるためです。 以上が、C#でlong型を扱う際の注意点です。これらのポイントを抑えてプログラミングすることで、安全かつ正確な処理を実現することができます。