雑記 |
Visual Basic 中学校 > 雑記 >
2021/4/4
この記事が対象とする製品・バージョン
![]() |
C# 9.0 (2020年11月) | ◎ | 対象です。 |
![]() |
C# 8.0 (2019年9月) | ◎ | 対象です。 |
![]() |
C# 7.3 (2017年11月) | ◎ | 対象です。 |
![]() |
C# 7.2 (2017年8月) | ◎ | 対象です。 |
![]() |
C# 7.1 (2017年3月) | ◎ | 対象です。 |
![]() |
C# 6.0 (2015年7月) | ◎ | 対象です。 |
![]() |
C# 5.0 (2012年8月) | ◎ | 対象です。 |
![]() |
C# 4.0 (2010年4月) | ◎ | 対象です。 |
![]() |
C# 3.0 (2007年11月) | ◎ | 対象です。 |
![]() |
C# 2.0 (2005年11月) | ◎ | 対象です。 |
![]() |
C# 1.2 (2003年4月) | ◎ | 対象です。 |
![]() |
C# 1.1 (2003年4月) | ◎ | 対象です。 |
![]() |
C# 1.0 (2002年1月) | ◎ | 対象です。 |
小数…小数が表現できるかを示しています。
正確…正確な値を示すことができるかを表しています。×の場合は値に誤差が発生しますので、金額の計算など値の正確さが重要な場合は使用できません。
C# | 名称 読み方 |
小数 | 正確 | 値の範囲 |
---|---|---|---|---|
bool | 論理型 ブール |
- | - | true または false |
byte | バイト型 バイト |
× | 〇 | 0 ~ 255 |
char | 文字型 キャラ |
- | - | 1つのUnicodeのコードポイント ※多くの文字は1つのコードポイントで1文字ですが、複数のコードポイントで1文字を表す場合もあります。 ※数値に変換すると0 ~ 65535ですが数値用ではありません。 |
short | 短整数型 ショート |
× | 〇 | -32768 ~ 32767 |
int | 整数型 イント |
× | 〇 | -2147483648 ~ 2147483647 |
long | 長整数型 ロング |
× | 〇 | -9223372036854775808 ~ 9223372036854775807 |
sbyte | 符号付きバイト型 エスバイト |
× | 〇 | -128 ~ 127 |
ushort | 符号なし短整数型 ユーショート |
× | 〇 | 0 ~ 65535 |
uint | 符号なし整数型 ユーイント |
× | 〇 | 0 ~ 4294967295 |
ulong | 符号なし長整数型 ユーロング |
× | 〇 | 0 ~ 18446744073709551615 |
nint | ネイティブサイズの整数 エヌイント |
× | 〇 | C# 9.0(2020年11月) 以降で使用可能。 32ビット プラットフォームの場合 int と同じ範囲。 -2147483648 ~ 2147483647 64ビット プラットフォームの場合 long と同じ範囲。 -9223372036854775808 ~ 9223372036854775807 |
nuint | ネイティブサイズの符号なし整数 エヌユーイント |
× | 〇 | C# 9.0(2020年11月) 以降で使用可能。 32ビット プラットフォームの場合 uint と同じ範囲。 0 ~ 4294967295 64ビット プラットフォームの場合 ulong と同じ範囲。 0 ~ 18446744073709551615 |
decimal | 十進型 デシマル |
〇 | 〇 | ※小数の桁数によって異なります。 ・小数の桁数が0の場合 ・小数の桁数が28桁の場合 ・一番細かい値(分解能) |
float | 単精度浮動小数点型 フロート |
〇 | × | -340282350000000000000000000000000000000 ~ 340282350000000000000000000000000000000 一番細かい値(分解能) |
double | 倍精度浮動小数点型 ダブル |
〇 | × | -17976931348623157000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000 0000000000000000000000000 ~ 179769313486231570000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000 000000000000000000000000 一番細かい値(分解能) |
object | オブジェクト型 オブジェクト |
- | - | (任意の型を格納できます) |
string | 文字列型 ストリング |
- | - | 0 個 ~ 約 20 億個の文字 (厳密にはUnicodeのコードポイント) |
メモ:C# には日付型はありません。フレームワークで用意されている DateTime構造体を使用します。
通常は次のように使い分けてください。
使用する型 | |
---|---|
整数 | int |
もっと桁数の大きい整数 | long |
さらに桁数の大きい整数 または、 小数部分がある数値 |
decimal |
これで何か問題がある場合は、個別に検討します。いくつかのケースを紹介します。
この表にはのC#型ではありませんが、フレームワークで定義されている方もいくつか載せています。たとえば、無限の桁数の数値が必要な場合はフレームワークのBigIntegerが使用できます。
金額・数量 | decimal |
---|---|
科学的な計算(細かい誤差が許容できる場合) | double |
文字コード | char |
巨大な桁数の数値(小数あり、誤差あり) | double |
桁数に制限がない数値 | System.Numerics.BigInteger |
APIなど外部と連携 | int |
バイナリーデータ | byte |
日付・時刻 | System.DateTime |
期間 | System.TimeSpan |
平面座標 | System.Drawing.Point または System.Drawing.PointF |
虚数・複素数 | System.Numerics.Complex |
位置情報(緯度、経度、高度) | System.Device.Location.GeoCoordinate |
平面ベクトル | System.Numerics.Vector2 |
空間ベクトル | System.Numerics.Vector3 |
正確列 が × の場合の誤差の例
下記の例では、0.05 を 10回 たし算するので、結果は 0.5 になることを期待しますが、実際には 0.5 にはなりません。
float value = 0.05F; //末尾の F は値が float であることを示しています。
value += 0.05F; // 0.05 × 2 = 0.1 になることを期待
value += 0.05F; // 0.05 × 3 = 0.15 になることを期待
value += 0.05F; // 0.05 × 4 = 0.2 になることを期待
value += 0.05F; // 0.05 × 5 = 0.25 になることを期待
value += 0.05F; // 0.05 × 6 = 0.3 になることを期待
value += 0.05F; // 0.05 × 7 = 0.35 になることを期待
value += 0.05F; // 0.05 × 8 = 0.4 になることを期待
value += 0.05F; // 0.05 × 9 = 0.45 になることを期待
value += 0.05F; // 0.05 × 10= 0.5 になることを期待
System.Diagnostics.Debug.WriteLine(value); //0.50000006 と出力されます。
C#の型 | フレームワークの型 | サイズ (バイト) |
実数リテラルの サフィックス ※3 |
実数リテラルの記述例 | 備考 |
---|---|---|---|---|---|
bool | System.Boolean | ※1 | true または false | ||
byte | System.Byte | 1 | 1 | ||
char | System.Char | 2 | '字' または '\u5B57' | ||
short | System.Int16 | 2 | 1 | ||
int | System.Int32 | 4 | 1 | パフォーマンスが良いことが多い。(特に32ビットCPUの場合) | |
long | System.Int64 | 8 | L | 1L | |
nint | System.IntPtr | 4 または 8 ※2 | 1 | ||
nuint | System.UIntPtr | 4 または 8 ※2 | 1 | ||
sbyte | System.SByte | 1 | 1 | ||
ushort | System.UInt16 | 2 | 1 | ||
uint | System.UInt32 | 4 | U | 1U | |
ulong | System.UInt64 | 8 | U または L または UL | 1UL | |
decimal | System.Decimal | 16 | M | 1M | 数値の中でパフォーマンスが最も悪い。 0 を除いた場合の絶対値の最小値は 0.0000000000000000000000000001 (1E-28) |
float | System.Single | 4 | F | 1.0F | 値の範囲 負の場合:-3.4028235E+38 ~ -1.401298E-45 正の場合:1.401298E-45 ~ 3.4028235E+38 |
double | System.Double | 8 | D | 1.0D | 値の範囲 負の場合: 正の場合: |
object | System.Object | 4 または 8 ※2 | |||
string | System.String | ※1 | "文字列" |
サイズは情報量のサイズです。実際に使用する物理メモリのサイズではありません。
※1 プラットフォームによってサイズが異なります。
※2 32ビットのプラットフォームの場合4バイト、64ビットの場合8バイト。
※3 大文字と小文字の区別はありません。たとえば、 uL も Ul も ulong を表します。
Types - C# language specification | Microsoft Docs