プログラミング言語にあらかじめ用意されている変数の型を組込み型といいます。 C# には以下のような組込み型が用意されています。
| 符号付き | 符号無し | |||
|---|---|---|---|---|
| 数値型 | 整数型 | 8ビット整数 | sbyte | byte |
| 16ビット整数 | short | ushort | ||
| 32ビット整数 | int | uint | ||
| 64ビット整数 | long | ulong | ||
| 文字型 | char | |||
| 浮動小数点型 | 単精度 | float | ||
| 倍精度 | double | |||
| デシマル | decimal | |||
| 論理値型 | bool | |||
| 文字列型 | string | |||
| オブジェクト型 | object | |||
数学では無限の桁数の数字を扱えますが、コンピュータの内部では値を記憶しておく場所が限られているため、扱える値の範囲も限られています。 当然、桁の大きな値ほど大きな記憶領域を必要とします。 また、符号の有無によっても扱える値の範囲は変わります。
以下にC#の整数型の一覧を挙げます。
| 型名 | 記憶領域サイズ | 符合の有無 | 扱える値の範囲 |
|---|---|---|---|
byte | 1バイト | なし | 0 ~ 255 |
sbyte | 1バイト | あり | -128 ~ 127 |
short | 2バイト | あり | -32,768 ~ 32,767 |
ushort | 2バイト | なし | 0 ~ 65,535 |
int | 4バイト | あり | -2,147,483,648 ~ 2,147,483,647 |
uint | 4バイト | なし | 0 ~ 4,294,967,295 |
long | 8バイト | あり | -9,223,372,036,854,775,808 ~ 9,223,372,036,854,775,807 |
ulong | 8バイト | なし | 0 ~ 18,446,744,073,709,551,615 |
int は integer (整数)の略で、short と long の意味は名前通り、記憶領域サイズの長い/短いの違いです。
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 | タブ |
\' | ' (シングルクォーテーション) |
\" | " (ダブルクォーテーション) |
\\ | \ 自身 |
\uXXXX | UnicodeがXXXXの文字 (XXXXの部分には4桁の16進数が入る) |
char c = 'a'; // 文字リテラル
整数型のところでも述べたように、コンピュータの中では有限桁の数しか扱えませんので、 厳密にはコンピュータの中で「実数型」というものは扱うことが出来ません。 しかし、科学技術計算などでは、非常に大きな数や、非常に小さな数を扱いたい場面がしばしばあります。
そこで、「1.4982654×1058」というように、 指数表記を使って数を表すことを考えます。 こうすることで、非常に大きな数や、非常に小さな数を限られた桁数で表現することが出来ます。 この方法では、小数点の位置を変えて数を表現するので、このような形式の数を浮動小数点数(floating point number)といいます。 コンピュータの内部ではこのように実数は浮動小数点数として扱われています。
以下にC#の浮動小数点型の一覧を挙げます。
| 型名 | 記憶領域サイズ | 精度 | 扱える値の範囲 |
|---|---|---|---|
float | 4バイト | 7桁 | ±1.5 × 10-45 ~ ±3.4 × 1038 |
double | 8バイト | 15桁 | ±5.0 × 10-324 ~ ±1.7 × 10308 |
decimal | 16バイト | 28桁 | 1.0 × 10-28 ~ 7.9 × 1028 |
floatは floating-point (浮動小数点)の略で、doubleは double-source xml:space="preserve"cision floating-point (倍精度浮動小数点)という意味です。
decimal は名前通り、小数を意味するものですが、float や double と比べて、精度が高い代わりに、表現できる数の範囲が狭い(つまり、指数部の桁が少ない)という特徴があります。
そのため、float や double とはまったくの別物として扱われます。
C# のソースコード中に小数を書き込むと浮動小数点リテラルとみなされます。
数値の後ろに「f」か「F」を付けると float 型とみなされ、
「d」か「D」を付けると double 型とみなされ、
「m」か「M」を付けると decimal 型とみなされます。
また、浮動小数点リテラルは指数表記(2.56×104といった形式。2.56の部分を仮数部、10の肩に乗っている4のことを指数部といいます)でも書くことが出来ます。
指数表記のリテラルの書き方は [仮数部]e[指数部] (例えば、2.56×104は2.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 から派生しています。
(ユーザー定義型や派生については後ほど説明します。)
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 |