C# 変数とプリミティブデータ型:完全マスターガイド
C# 変数と(プリミティブ)データ型
このチュートリアルでは、変数、C#での変数作成方法、C#プログラミング言語がサポートするさまざまなデータ型について学びます。
変数はメモリ位置に与えられた象徴的な名前です。変数はコンピュータプログラムでデータを格納するために使用されます。
C#での変数宣言方法
C#で変数を宣言する例です。
int age;
この例では、int(整数)型の変数ageが宣言され、整数値のみを格納できます。
プログラムの後で変数に値を代入することもできます:
int age; ... ... ... age = 24;
しかし、宣言時に初期化することも可能です:
int age = 24;
ここではint型の変数ageを宣言し、同時に24で初期化しています。
変数なので、値を後から変更することもできます:
int age = 24; age = 35;
ここではageの値が24から35に変更されました。
C#では変数を使用する前に宣言する必要があります。つまり、変数の名前と型が、値を代入する前に分かっていなければなりません。これがC#が静的型付け言語と呼ばれる理由です。
一度宣言されると、スコープ内で変数のデータ型を変更することはできません。スコープは、変数が見える、または使用可能なコードブロックと考えられます。前の文が理解できなくても心配いりません。後の章でスコープについて学びます。
現時点では、C#では以下ができないことを覚えておいてください:
int age; age = 24; ... ... ... float age;
暗黙的に型指定される変数
あるいはC#では、varキーワードを使って型を指定せずに変数を宣言できます。このような変数を暗黙的に型指定されるローカル変数と呼びます。
varキーワードで宣言された変数は、宣言時に初期化しなければなりません。
var value = 5;
コンパイラは代入された値から変数の型を推論します。上記例ではvalueはint型になります。これは以下と等価です:
int value; value = 5;
暗黙的に型指定されるローカル変数の詳細は別途学習できます。
C#での変数命名規則
変数命名には一定のルールがあります。C#での変数命名ルールは以下の通りです:
- 変数名には文字(大文字・小文字)、アンダースコア(_)、数字のみ使用可能です。
- 変数名は文字、アンダースコア、または@シンボルで始める必要があります。例:
C# 変数命名規則 変数名 備考 name 有効 subject101 有効 _age 有効(プライベートメンバ変数の命名慣習として推奨) @break 有効(名前が予約キーワードの場合に使用) 101subject 無効(数字で始まる) your_name 有効 your name 無効(空白を含む) - C#は大文字小文字を区別します。ageとAgeは別の変数を指します。
- 変数名はC#キーワードであってはなりません。例えば
if、for、usingは変数名にできません。C#キーワードについては次のチュートリアルで詳しく説明します。
変数命名のベストプラクティス
- 意味のある変数名を選びます。例えばname、age、subjectはn、a、sよりわかりやすいです。
- ローカル変数にはcamelCase記法(小文字で開始)を使用します。例:numberOfStudents、ageなど。
- パブリックメンバ変数にはPascalCaseまたはCamelCase(大文字で開始)を使用します。例:FirstName、Priceなど。
- プライベートメンバ変数には先頭アンダースコア(_)に続けてcamelCase記法を使用します。例:_bankBalance、_emailAddressなど。
C#の命名規約の詳細はこちらを参照してください。
パブリック/プライベートメンバ変数については後で学習します。
C# プリミティブデータ型
C#の変数は大きく値型と参照型に分類されます。このチュートリアルでは、値型のサブクラスであるプリミティブ(単純)データ型について説明します。
参照型は後のチュートリアルで扱います。変数型について詳しく知りたい場合はC# Types and variables(公式ドキュメント)を参照してください。
ブール型 (bool)
- ブールデータ型には
trueまたはfalseの2つの値があります - デフォルト値:
false - ブール変数は一般的にif文、ループなどの条件判定に使用されます
例:
using System;
namespace DataType
{
class BooleanExample
{
public static void Main(string[] args)
{
bool isValid = true;
Console.WriteLine(isValid);
}
}
}
実行結果:
True
符号付き整数型
これらのデータ型は整数値(正と負)を保持します。利用可能なビットのうち1ビットが符号用です。
1. sbyte
- サイズ:8ビット
- 範囲:-128 〜 127
- デフォルト値:0
例:
using System;
namespace DataType
{
class SByteExample
{
public static void Main(string[] args)
{
sbyte level = 23;
Console.WriteLine(level);
}
}
}
実行結果:
23
範囲外(-128未満または127超)の値を代入して結果を確認してみてください。
2. short
- サイズ:16ビット
- 範囲:-32,768 〜 32,767
- デフォルト値:0
例:
using System;
namespace DataType
{
class ShortExample
{
public static void Main(string[] args)
{
short value = -1109;
Console.WriteLine(value);
}
}
}
実行結果:
-1109
3. int
- サイズ:32ビット
- 範囲:-2,147,483,648 〜 2,147,483,647
- デフォルト値:0
例:
using System;
namespace DataType
{
class IntExample
{
public static void Main(string[] args)
{
int score = 51092;
Console.WriteLine(score);
}
}
}
実行結果:
51092
4. long
- サイズ:64ビット
- 範囲:-9,223,372,036,854,775,808 〜 9,223,372,036,854,775,807
- デフォルト値:
0L[末尾のLはlong型を示す]
例:
using System;
namespace DataType
{
class LongExample
{
public static void Main(string[] args)
{
long range = -7091821871L;
Console.WriteLine(range);
}
}
}
実行結果:
-7091821871
符号なし整数型
これらのデータ型は0以上の値のみ保持します。負の値がないことが確実な場合に使用します。
1. byte
- サイズ:8ビット
- 範囲:0 〜 255
- デフォルト値:0
例:
using System;
namespace DataType
{
class ByteExample
{
public static void Main(string[] args)
{
byte age = 62;
Console.WriteLine(age);
}
}
}
実行結果:
62
2. ushort
- サイズ:16ビット
- 範囲:0 〜 65,535
- デフォルト値:0
例:
using System;
namespace DataType
{
class UShortExample
{
public static void Main(string[] args)
{
ushort value = 42019;
Console.WriteLine(value);
}
}
}
実行結果:
42019
3. uint
- サイズ:32ビット
- 範囲:0 〜 4,294,967,295
- デフォルト値:0
例:
using System;
namespace DataType
{
class UIntExample
{
public static void Main(string[] args)
{
uint totalScore = 1151092;
Console.WriteLine(totalScore);
}
}
}
実行結果:
1151092
4. ulong
- サイズ:64ビット
- 範囲:0 〜 18,446,744,073,709,551,615
- デフォルト値:0
例:
using System;
namespace DataType
{
class ULongExample
{
public static void Main(string[] args)
{
ulong range = 17091821871L;
Console.WriteLine(range);
}
}
}
実行結果:
17091821871
浮動小数点型
これらのデータ型は小数点を含む数値を保持します。例:12.36、-92.17など。
1. float
- 単精度浮動小数点型
- サイズ:32ビット
- 範囲:1.5 × 10⁻⁴⁵ 〜 3.4 × 10³⁸
- デフォルト値:0.0F [末尾のFはfloat型を示す]
例:
using System;
namespace DataType
{
class FloatExample
{
public static void Main(string[] args)
{
float number = 43.27F;
Console.WriteLine(number);
}
}
}
実行結果:
43.27
2. double
- 倍精度浮動小数点型。単精度と倍精度の違いは?
- サイズ:64ビット
- 範囲:5.0 × 10⁻³²⁴ 〜 1.7 × 10³⁰⁸
- デフォルト値:0.0D [末尾のDはdouble型を示す]
例:
using System;
namespace DataType
{
class DoubleExample
{
public static void Main(string[] args)
{
double value = -11092.53D;
Console.WriteLine(value);
}
}
}
実行結果:
-11092.53
文字型 (char)
- 16ビットのUnicode文字を表します
- サイズ:16ビット
- デフォルト値:'\0'
- 範囲:U+0000 ('\u0000') 〜 U+FFFF ('\uffff')
例:
using System;
namespace DataType
{
class CharExample
{
public static void Main(string[] args)
{
char ch1 = '\u0042';
char ch2 = 'x';
Console.WriteLine(ch1);
Console.WriteLine(ch2);
}
}
}
実行結果:
B x
'B'のUnicode値は'\u0042'なので、ch1を出力すると'B'が表示されます。
10進数型 (decimal)
- 浮動小数点型(double、float)より高精度で範囲は小さいため、金融計算に適しています
- サイズ:128ビット
- デフォルト値:0.0M [末尾のMはdecimal型を示す]
- 範囲:(-7.9 × 10²⁸ 〜 7.9 × 10²⁸) / (10⁰ 〜 10²⁸)
例:
using System;
namespace DataType
{
class DecimalExample
{
public static void Main(string[] args)
{
decimal bankBalance = 53005.25M;
Console.WriteLine(bankBalance);
}
}
}
実行結果:
53005.25
末尾にMまたはmサフィックスを付ける必要があります。付けないとdoubleとして扱われエラーになります。
C# リテラル
次のステートメントを見てみましょう:
int number = 41;
ここで、
intはデータ型- numberは変数
41はリテラル
リテラルはプログラムに直接現れる固定値です。計算を必要としません。例:5、false、'w'はプログラムに直接現れるリテラルです。
ブールリテラル
trueとfalseが利用可能なブールリテラルです- ブール変数の初期化に使用されます
例:
bool isValid = true; bool isPresent = false;
整数リテラル
- 整数リテラルは整数データ型(
sbyte、short、int、long、byte、ushort、uint、ulong)の変数初期化に使用されます - 整数リテラルが
Lまたはlで終わる場合、long型です。ベストプラクティスとしてL(小文字のlではない)を使用します。long value1 = 4200910L; long value2 = -10928190L;
- 整数リテラルが
0xで始まる場合、16進数値を表します。プレフィックスなしは10進数。8進数と2進数表現はC#では許可されていません。int decimalValue = 25; int hexValue = 0x11c;// 10進数284
浮動小数点リテラル
- 浮動小数点リテラルは
floatとdoubleデータ型の変数初期化に使用されます - 浮動小数点リテラルがサフィックス
fまたはFで終わる場合、float型。dまたはDで終わる場合、double型。どちらのサフィックスもない場合、デフォルトでdouble型になります - これらのリテラルは科学的表記法で
eまたはEを含みます。double number = 24.67;// デフォルトでdouble float value = -12.29F; double scientificNotation = 6.21e2;// 6.21 × 10² = 621と等価
文字および文字列リテラル
- 文字リテラルは
charデータ型の変数初期化に使用されます - 文字リテラルは一重引用符で囲みます。例:
'x'、'p'など - 文字、16進エスケープシーケンス、Unicode表現、整数からcharへのキャストで表現可能。
char ch1 = 'R';// 文字 char ch2 = '\x0072';// 16進数 char ch3 = '\u0059';// Unicode char ch4 = (char)107;// 整数からキャスト
- 文字列リテラルは文字リテラルの集合です
- 二重引用符で囲みます。例:"Hello"、"Easy Programming"など。
string firstName = "Richard"; string lastName = " Feynman";
- C#は以下のエスケープシーケンス文字もサポートします:
文字 意味 \'一重引用符 \"二重引用符 \\バックスラッシュ \n改行 \rキャリッジリターン \t水平タブ \aアラート(ビープ音) \bバックスペース
C言語
- C++変数・リテラル・定数完全ガイド:基礎から実践まで
- C++データ型完全ガイド:基本型、修飾子、ベストプラクティス
- C言語変数・定数・リテラル完全ガイド
- C言語データ型完全解説:int、float、charなど
- C言語ストレージクラス完全理解:スコープ・ライフタイム・パフォーマンス
- C++変数とデータ型:int、double、char、string、boolを徹底解説
- C言語のデータ型完全ガイド:整数、浮動小数点、void型
- Python データ型マスター: 実践ガイド
- Java変数とリテラル:包括的ガイド
- Javaプリミティブデータ型:例付き完全ガイド
- Java変数の種類:ローカル、インスタンス、クラス変数を徹底解説