short (C# リファレンス)short (C# Reference)

short は、次の表に示すサイズと範囲で値を格納する整数データ型を示します。short denotes an integral data type that stores values according to the size and range shown in the following table.

Type 範囲Range サイズSize .NET 型.NET type
short -32,768 ~ 32,767-32,768 to 32,767 符号付き 16 ビット整数Signed 16-bit integer System.Int16

リテラルLiterals

short 変数を宣言し、10 進リテラル、16 進リテラル、または (C# 7.0 以降) バイナリ リテラルを割り当てることによって初期化できます。You can declare and initialize a short variable by assigning a decimal literal, a hexadecimal literal, or (starting with C# 7.0) a binary literal to it. 整数リテラルが short の範囲外にある場合 (つまり、Int16.MinValue より小さいか、Int16.MaxValue より大きい場合)、コンパイル エラーが発生します。If the integer literal is outside the range of short (that is, if it is less than Int16.MinValue or greater than Int16.MaxValue), a compilation error occurs.

次の例では、整数 1,034 を 10 進リテラル、16 進リテラル、バイナリ リテラルで表したものが、int から short 値に暗黙的に変換されています。In the following example, integers equal to 1,034 that are represented as decimal, hexadecimal, and binary literals are implicitly converted from int to short values.

short shortValue1 = 1034;
Console.WriteLine(shortValue1);

short shortValue2 = 0x040A;
Console.WriteLine(shortValue2);

short shortValue3 = 0b0100_00001010;
Console.WriteLine(shortValue3);
// The example displays the following output:
//          1034
//          1034
//          1034

注意

16 進リテラルを表すにはプレフィックス 0x または 0X を使い、バイナリ リテラルを表すにはプレフィックス 0b または 0B を使います。You use the prefix 0x or 0X to denote a hexadecimal literal and the prefix 0b or 0B to denote a binary literal. 10 進リテラルには、プレフィックスはありません。Decimal literals have no prefix.

C# 7.0 以降では、読みやすさを強化するためにいくつかの機能が追加されています。Starting with C# 7.0, a couple of features have been added to enhance readability.

  • C# 7.0 では、桁区切り記号としてアンダースコア文字 (_) が使用できます。C# 7.0 allows the usage of the underscore character, _, as a digit separator.
  • C# 7.2 では、プレフィックスの後に、_ をバイナリまたは 16 進リテラルの桁区切り記号として使用できます。C# 7.2 allows _ to be used as a digit separator for a binary or hexadecimal literal, after the prefix. 10 進リテラルは先頭にアンダー スコアを持つことはできません。A decimal literal isn't permitted to have a leading underscore.

以下にいくつか例を示します。Some examples are shown below.

short shortValue1 = 1_034;
Console.WriteLine(shortValue1);

short shortValue2 = 0b00000100_00001010;
Console.WriteLine(shortValue2);

short shortValue3 = 0b_00000100_00001010;       // C# 7.2 onwards
Console.WriteLine(shortValue3);
// The example displays the following output:
//          1034
//          1034
//          1034

コンパイラのオーバーロード解決Compiler overload resolution

オーバーロードされたメソッドを呼び出すときは、キャストを使用する必要があります。A cast must be used when calling overloaded methods. たとえば、short パラメーターと int パラメーターを使用したオーバーロードされたメソッドがあるとします。Consider, for example, the following overloaded methods that use short and int parameters:

public static void SampleMethod(int i) {}
public static void SampleMethod(short s) {}

short キャストを使用すると、正しい型が呼び出されます。次に例を示します。Using the short cast guarantees that the correct type is called, for example:

SampleMethod(5);         // Calling the method with the int parameter
SampleMethod((short)5);  // Calling the method with the short parameter

変換Conversions

short から intlongfloatdoubledecimal への、定義済みの暗黙的な変換が組み込まれています。There is a predefined implicit conversion from short to int, long, float, double, or decimal.

記憶領域が大きなリテラル以外の数値型を暗黙的に short に変換することはできません (整数型の記憶領域については、「整数型の一覧表」を参照してください)。You cannot implicitly convert nonliteral numeric types of larger storage size to short (see Integral Types Table for the storage sizes of integral types). たとえば、2 つの short 変数 xy があるとします。Consider, for example, the following two short variables x and y:

short x = 5, y = 12;

次の代入ステートメントは、代入演算子の右側にある算術式が既定で int に評価されるため、コンパイル エラーになります。The following assignment statement produces a compilation error because the arithmetic expression on the right-hand side of the assignment operator evaluates to int by default.

short z  = x + y;        // Compiler error CS0266: no conversion from int to short

この問題を解決するには、キャストを使用します。To fix this problem, use a cast:

short z  = (short)(x + y);   // Explicit conversion

次のステートメントを使うこともできます。このステートメントでは、変換先の変数の記憶領域サイズは元のサイズ以上になります。It is also possible to use the following statements, where the destination variable has the same storage size or a larger storage size:

int m = x + y;
long n = x + y;

浮動小数点型から short への暗黙的な変換は行われません。There is no implicit conversion from floating-point types to short. たとえば、次のステートメントは、明示的なキャストを使用しない場合、コンパイラ エラーになります。For example, the following statement generates a compiler error unless an explicit cast is used:

short x = 3.0;          // Error: no implicit conversion from double
short y = (short)3.0;   // OK: explicit conversion

浮動小数点型と整数型の混在する算術式の詳細については、「float」と「double」を参照してください。For information on arithmetic expressions with mixed floating-point types and integral types, see float and double.

暗黙的な数値変換規則について詳しくは、「暗黙的な数値変換の一覧表」をご覧ください。For more information on implicit numeric conversion rules, see the Implicit Numeric Conversions Table.

C# 言語仕様C# language specification

詳細については、「C# 言語仕様」の整数型に関するセクションを参照してください。For more information, see Integral types in the C# Language Specification. 言語仕様は、C# の構文と使用法に関する信頼性のある情報源です。The language specification is the definitive source for C# syntax and usage.

関連項目See also