組込み型

目次

キーワード

組込み型の種類

プログラミング言語にあらかじめ用意されている変数の型を組込み型といいます。 C# には以下のような組込み型が用意されています。

符号付き符号無し
数値型整数型8ビット整数sbytebyte
16ビット整数shortushort
32ビット整数intuint
64ビット整数longulong
文字型char
浮動小数点型単精度float
倍精度double
デシマルdecimal
論理値型bool
文字列型string
オブジェクト型object

整数型

数学では無限の桁数の数字を扱えますが、コンピュータの内部では値を記憶しておく場所が限られているため、扱える値の範囲も限られています。 当然、桁の大きな値ほど大きな記憶領域を必要とします。 また、符号の有無によっても扱える値の範囲は変わります。

以下にC#の整数型の一覧を挙げます。

型名記憶領域サイズ符合の有無扱える値の範囲
byte1バイトなし0 ~ 255
sbyte1バイトあり-128 ~ 127
short2バイトあり-32,768 ~ 32,767
ushort2バイトなし0 ~ 65,535
int4バイトあり-2,147,483,648 ~ 2,147,483,647
uint4バイトなし0 ~ 4,294,967,295
long8バイトあり-9,223,372,036,854,775,808 ~ 9,223,372,036,854,775,807
ulong8バイトなし0 ~ 18,446,744,073,709,551,615

int は integer (整数)の略で、shortlong の意味は名前通り、記憶領域サイズの長い/短いの違いです。 byte も名前通りで「1バイトの変数」という意味です。 sbyte の「s」は signed の s で符号付きを意味します。 また、uint, ushort, ulong の「u」は unsigned の u で符号無しを意味します。

整数リテラル

C# のソースコード中に直接整数値を書き込むと整数リテラルとみなされます。 また、整数値の後ろに「u」か「U」を付けると符号なし整数とみなされ、 「l」か「L」を付けると long 型のリテラルとみなされます。

int   k = 351;    // 整数リテラル
uint  l = 86U;    // 符号なし
long  m = 1879L;  // Lを付けるとlongとみなされる
ulong n = 2419UL; // UとLを付けるとulongとみなされる

文字型

コンピュータは基本的に数値しか扱えません。 そのため、文字もコンピュータの内部では整数値として扱われています。 どの文字に対して何番の数字を割り当てるかは、標準化団体によって取り決めがなされています。 このような取り決めによって文字に割り当てられた整数値を文字コードといいます。

C# では Unicode という2バイトの文字コードが使われています。 そのため、C# の文字型 char (characterの略)は2バイトの数値として扱われます。

文字リテラル

文字リテラルは 'a' といったように ' (シングルクォーテーション)で囲んで表現します。 また、' 自身を表す文字リテラルは '\'' というように書きます。 この \ 記号とそれに続く文字はエスケープシーケンスと呼ばれ、特殊な意味を持ちます。 以下に主なエスケープシーケンスの種類と意味を挙げます。

エスケープシーケンス意味
\n改行文字
\tタブ
\' ' (シングルクォーテーション)
\" " (ダブルクォーテーション)
\\ \ 自身
\uXXXXUnicodeがXXXXの文字 (XXXXの部分には4桁の16進数が入る)

char c = 'a';                       // 文字リテラル

浮動小数点型(実数型)

整数型のところでも述べたように、コンピュータの中では有限桁の数しか扱えませんので、 厳密にはコンピュータの中で「実数型」というものは扱うことが出来ません。 しかし、科学技術計算などでは、非常に大きな数や、非常に小さな数を扱いたい場面がしばしばあります。

そこで、「1.4982654×1058」というように、 指数表記を使って数を表すことを考えます。 こうすることで、非常に大きな数や、非常に小さな数を限られた桁数で表現することが出来ます。 この方法では、小数点の位置を変えて数を表現するので、このような形式の数を浮動小数点数(floating point number)といいます。 コンピュータの内部ではこのように実数は浮動小数点数として扱われています。

以下にC#の浮動小数点型の一覧を挙げます。

型名記憶領域サイズ精度扱える値の範囲
float4バイト7桁±1.5 × 10-45 ~ ±3.4 × 1038
double8バイト15桁±5.0 × 10-324 ~ ±1.7 × 10308
decimal16バイト28桁1.0 × 10-28 ~ 7.9 × 1028

floatは floating-point (浮動小数点)の略で、doubleは double-source xml:space="preserve"cision floating-point (倍精度浮動小数点)という意味です。

decimal は名前通り、小数を意味するものですが、floatdouble と比べて、精度が高い代わりに、表現できる数の範囲が狭い(つまり、指数部の桁が少ない)という特徴があります。 そのため、floatdouble とはまったくの別物として扱われます。

浮動小数点リテラル

C# のソースコード中に小数を書き込むと浮動小数点リテラルとみなされます。 数値の後ろに「f」か「F」を付けると float 型とみなされ、 「d」か「D」を付けると double 型とみなされ、 「m」か「M」を付けると decimal 型とみなされます。 また、浮動小数点リテラルは指数表記(2.56×104といった形式。2.56の部分を仮数部、10の肩に乗っている4のことを指数部といいます)でも書くことが出来ます。 指数表記のリテラルの書き方は [仮数部]e[指数部] (例えば、2.56×1042.56e4と書く)です。

double x = 2.2362;  // 浮動小数点リテラル
float  y = 2.7183f; // fを付けると単精度
double z = 6.02e23; // 指数表記 6.02×10^23
decimal m = 99.9m;  // mを付けるとdecimalになる

論理値型

論理値とは条件式が正しいか間違っているかをあらわすものです。 正しい状態(または true という)と、 間違った状態(偽または false という)の2つの値を持ちます。

C# では論理値型は bool (boolean の略。論理代数を考案した George Bool という人物にちなんで論理値のことを英語で boolean という)といいます。

論理値リテラル

論理値リテラルは真を表す true と、 偽を表す false の2つです。

bool b = x==1;  // x が 1 ならば true 、そうでなければ false になる。
bool t = true;  // 直接 true を代入
bool f = false; // 直接 false を代入

文字列型

文字列は名前通り、文字の列なわけですから、char 型の配列で十分な気もします。 実際、C言語などのプログラミング言語では文字列は char 型の配列として扱われています。 しかし、文字列には、連結、検索、置換、数値への変換など、文字の配列には無い機能が必要になります。 そのため、C# では string という文字列用の型が用意されています。

文字列リテラル

文字列リテラルは "文字列の例" といったように " (ダブルクォーテーション)で囲んで表現します。

また、文字列リテラル中で " を使うためには、 文字リテラル中の'と同様にエスケープシーケンスを使って "<a href=\"index.html\">" というように表現します。

また、@"@-quoted string" というように、 '' や "" の前に @ (アットマーク)を付けると \ とそれに続く文字がエスケープシーケンスとはみなされず、 普通に \ 記号として解釈されます。これを @-quoted string といいます。

string s = "C#入門";                // 文字列リテラル
string x = "\uff9f\u0434\uff9f";    // エスケープシーケンスを使ってUnicodeを直に入力。 ゚д゚ ←これ。
string path = @"C:\windows\system"; // @-quoted string。 \ 記号がそのまま解釈される。

オブジェクト型

object はオブジェクト型と呼ばれ、任意の型の値を格納できる型です。

C# では、組込み型・ユーザー定義型を問わずすべての型は object から派生しています。 (ユーザー定義型や派生については後ほど説明します。)

.NET Framework の型

C# の組込み型は .NET Framework で定義されている型の別称になっています。 以下に、C# の組込み型名と .NET Framework で定義されている型との対応表を示します。

C#.NET Framework
bool System.Boolean
byte System.Byte
sbyte System.SByte
short System.Int16
ushort System.UInt16
int System.Int32
uint System.UInt32
long System.Int64
ulong System.UInt64
char System.Char
float System.Single
double System.Double
decimal System.Decimal
string System.String
object System.Object