C#プログラミングにおいて、short型は整数を扱うためのデータ型の一つです。
しかし、その仕様や使い方について初心者にとっては理解しづらい部分もあるかもしれません。そこで本記事では、short型の基本的な仕様から実際のコード例まで、わかりやすく詳しく解説していきます。
short型とは
short型は、整数を扱うためのデータ型の一つで、16ビット(2バイト)の範囲で表現されます。
C#では、shortキーワードを使用して宣言します。 short型は、int型よりも小さな値を扱う場合に使用されます。
例えば、変数が0から100までしか取らない場合には、int型では4バイト分のメモリを無駄に消費することになりますが、short型を使うことで2バイト分のメモリで済みます。 以下は、short型の宣言方法です。
short num = 10;
このように宣言することで、numという変数に10という値が格納されます。
short型の特徴
範囲
short型は、-32,768から32,767までの整数を表現することができます。int型やlong型に比べると範囲が狭いですが、必要な範囲内であれば十分に使えます。
メモリ使用量
short型は2バイト(16ビット)のメモリを使用します。int型やlong型に比べるとメモリ使用量が少なく、大量のデータを扱う場合に有効です。
演算速度
short型は、int型やlong型に比べて演算速度が速い傾向があります。
ただし、CPUのアーキテクチャやコンパイラの最適化方法によって異なるため、必ずしも全ての環境で同じ結果とは限りません。
short型の宣言方法
C#でshort型を宣言する方法には、変数の宣言と配列の宣言があります。
変数の宣言
short型の変数を宣言する場合は、以下のように記述します。
short num = 10;
上記の例では、numという名前のshort型変数を宣言し、初期値として10を代入しています。また、変数名は任意であるため、自分がわかりやすい名前をつけることができます。
配列の宣言
short型の配列を宣言する場合は、以下のように記述します。
short[] nums = new short[5];
上記の例では、numsという名前のshort型配列を宣言し、要素数5で初期化しています。また、配列要素へアクセスする場合はインデックス番号(0から始まる)を指定します。
nums[0] = 10;
nums[1] = 20;
nums[2] = 30;
nums[3] = 40;
nums[4] = 50;
上記の例では、先程宣言したnums配列に対して各要素に値を代入しています。
short型の演算
short型は整数型の一つであり、四則演算や比較演算、論理演算などが可能です。
四則演算
short型同士の加減乗除は、int型同様に行うことができます。ただし、結果がshort型の範囲を超える場合はオーバーフローが発生します。
short a = 10;
short b = 5;
short c = a + b; // cには15が代入される
比較演算
short型同士の比較も可能です。比較演算子として<
>
<=
>=
==
!=
を使用します。
short a = 10;
short b = 5;
bool result1 = a > b; // true
bool result2 = a == b; // false
論理演算
AND(&)、OR(|)、XOR(^)などの論理演算も可能です。また、NOT(~)も使用することができます。
short a = 10; // 1010(2進数)
short b = 6; // 0110(2進数)
short c = (short)(a & b); // AND: 0010(2進数) -> cには2が代入される
short d = (short)(a | b); // OR: 1110(2進数) -> dには14が代入される
short e = (short)(a ^ b); // XOR: 1100(2進数) -> eには12が代入される
注意点として、NOT(~)を使用する場合はビット反転した結果を返すため、結果を正しく取得するためにビットシフトする必要があります。
// NOT: 0101(2進数) -> ビット反転 -> 1010(2進数) -> シフト -> 1010(2進数) -> fには-11が代入される
short f = (short)(~a << 1);
short型の注意点
オーバーフロー
short型は-32768から32767までの範囲しか表現できないため、この範囲を超える値を代入するとオーバーフローが発生します。
オーバーフローが発生すると、値が正しく表現されなくなります。 例えば、以下のようにshort型の変数に32767を代入した場合は問題ありません。
short num = 32767;
しかし、以下のように32768を代入した場合はオーバーフローが発生し、numには-32768が代入されます。
short num = 32768; // オーバーフロー発生
キャスト
short型とint型やlong型などの他の数値型と演算する場合、暗黙的なキャストが行われることがあります。
しかし、明示的にキャストしない場合はコンパイルエラーが発生することがあります。 例えば、以下のようにfloat型とshort型を足し算する場合はコンパイルエラーが発生します。
float num1 = 100;
short num2 = 200;
short result = num1 + num2; // コンパイルエラー
この場合、num1を明示的にshort型にキャストして計算すれば問題ありません。
short result = (short)((short)num1 + num2);