数値型 (Numeric types)

数値型には、次の3種があります。

整数型 (Integral Types)

範囲 種類 ビット数
下限 上限
sbyte -128 127 符号付き整数 8
byte 0 255 符号なし整数 8
char U+0000 U+ffff Unicode文字 16
short -32,768 32,767
(0x7FFF)
符号付き整数 16
ushort 0 65,535
(0xFFFF)
符号なし整数 16
int -2,147,483,648 2,147,483,647
(0x7FFF FFFF)
符号付き整数 32
uint 0 4,294,967,295
(0xFFFF FFFF)
符号なし整数 32
long -9,223,372,036,854,775,808 9,223,372,036,854,775,807
(0x7FFF FFFF FFFF FFFF)
符号付き整数 64
ulong 0 18,446,744,073,709,551,615
(0xFFFF FFFF FFFF FFFF)
符号なし整数 64
整数型の一覧表 (C# リファレンス) | MSDN

Byte構造体

byte b1 = 0xff;
b1++; // 0x00 (算術オーバーフロー)

byte b2 = 0x00;
b2--; // 0xff (算術オーバーフロー)

型変換

int i = 0x110;
byte b = (byte)i; // 0x10 (オーバーフローする)
byte b1 = 0x80;
byte b2 = 0x80;

int c1 = b1 + b2; // 0x100 (intにキャストされて演算される)
byte c2 = b1 + b2; // error CS0266: 型 'int' を 'byte' に暗黙的に変換できません。明示的な変換が存在します

バイト配列 → 数値への変換

byte[] bytes = { 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08 };
int a = BitConverter.ToInt32(bytes, 0); // 67305985 (0x04030201)
string hex = Convert.ToString(a, 16);   // "4030201"

bool b = BitConverter.ToBoolean(bytes, 0);  // true
double c = BitConverter.ToDouble(bytes, 0); // 5.447603722011605E-270
方法: バイト配列を int に変換する (C# プログラミング ガイド) | MSDN
public static int ToInt32(
    byte[] value,
    int startIndex
)
BitConverter.ToInt32 メソッド (Byte[], Int32) (System) | MSDN
異なるエンディアンへの対応

複数バイトのデータを数値へ変換するときにはシステムのアーキテクチャによって異なる結果となるため、バイトの並びを反転するなどの対処が必要です。

byte[] bytes = { 0xff, 0x01, 0x00, 0x00, 0x00, 0xff };

if (BitConverter.IsLittleEndian)
{
    Array.Reverse(bytes, 1, 4); // インデックス1から、4バイト分の並びを反転させる
}

int x = BitConverter.ToInt32(bytes, 1); // 0x01000000

数値 → バイト配列への変換

byte[] bytes = BitConverter.GetBytes(10); // { 0x0a, 0x00, 0x00, 0x00 }
public static byte[] GetBytes(
    int value
)
BitConverter.GetBytes メソッド (Int32) (System) | MSDN

バイト配列 → 16進文字列

byte[] data = new byte[] { 10, 20, 30 };

// 方法1:ToString()で変換した16進文字列を、StringBuilderで連結
StringBuilder stringBuilder = new StringBuilder(data.Length * 2);
foreach (byte item in data)
{
    stringBuilder.Append(item.ToString("X2"));
}
string hex1 = stringBuilder.ToString(); // 0A141E

// 方法2:BitConverterで変換したハイフン区切りの16進文字列の、ハイフンを削除
string hex2 = BitConverter.ToString(data).Replace("-", ""); // 0A141E

c# - How do you convert Byte Array to Hexadecimal String, and vice versa? - Stack Overflow

Int32構造体

文字列への変換

書式を指定して文字列に変換するならば、ToString()を呼びます。

public string ToString(
    string format // 標準の数値書式指定文字列
)
Int32.ToString メソッド (String) (System) | MSDN
int a = 123;

a.ToString();            // 123
a.ToString("N");         // 123.00

2進や16進といった10進以外の形式で出力するには、Convert.ToString()を呼びます。

public static string ToString(
    int value,
    int toBase // 基数
)
Convert.ToString メソッド (Int32, Int32) (System) | MSDN Convert.ToString メソッド (System) | MSDN
int a = 123;

Convert.ToString(a);     // 123
Convert.ToString(a, 2);  // 1111011 (2進数)
Convert.ToString(a, 16); // 7b      (16進数)

文字列から数値への変換

整数リテラル (Integer literals)

var a = 10;          // int
var b = 10U;         // uint
var c = 4294967295U; // uint  (0x0FFFFFFFF)
var d = 4294967296U; // ulong (0x100000000)

var e = 9223372036854775807L; // long  (0x7FFFFFFFFFFFFFFF)
var f = 9223372036854775808L; // ulong (0x8000000000000000)
  • サフィックスなし … int、uint、long、ulongの順で、その値を表すことができる最初の型
  • Uまたはu … uint、ulongの順で、その値を表すことができる最初の型
  • Lまたはl … long、ulongの順で、その値を表すことができる最初の型
  • ULまたはul、LUまたはlu … ulong型
2.4.4.2 Integer literals (C#) | MSDN

浮動小数点型 (Floating-Point Types)

おおよその範囲 有効桁数
float ±1.5x10⁻⁴⁵ ~ ±3.4x10³⁸ 7
double ±5.0x10⁻³²⁴ ~ ±1.7x10³⁰⁸ 15~16
浮動小数点型の一覧表 (C# リファレンス) | MSDN

Double構造体

定数フィールド
フィールド 内容
Epsilon ゼロより大きい最小のDouble値
MaxValue Doubleの最大有効値
MinValue Doubleの最小有効値
NaN 非数 (NaN) の値
PositiveInfinity 正の無限大
NegativeInfinity 負の無限大
フィールド | MSDN
double r1 = 0.0 / 0.0; // NaN
Double.IsNaN(r1); // true

double r2 =  1.0 / 0.0; // Infinity
double r3 = -1.0 / 0.0; // -Infinity
Double.IsInfinity(r2); // true
Double.IsInfinity(r3); // true
Double.IsPositiveInfinity(r2); // true
Double.IsPositiveInfinity(r3); // false

文字列への変換

public string ToString(
    string format // 数値書式指定文字列
)
Double.ToString メソッド (String) (System) | MSDN
(12.3456789).ToString();      // "12.3456789"
(12.3456789).ToString("F");   // "12.35"

(12.3456789).ToString("F0");  // "12"
(12.3456789).ToString("F5");  // "12.34568"
(12.3456789).ToString("F10"); // "12.3456789000"

Decimal構造体

おおよその範囲 有効桁数
decimal (-7.9x10²⁸ ~ 7.9x10²⁸) / (100 ~ 28) 28~29
Decimal a1 = new Decimal(1.0);
decimal a2 = new decimal(1.0); // 名前の簡略化
decimal a3 = 1.0m;             // リテラル

double b = Decimal.ToDouble(a1);

実数リテラル (Real literals)

接尾辞
float F または f
double D または d
decimal M または m
2.4.4.3 Real literals (C#) | MSDN

算術オーバーフロー (Arithmetic Overflow)

既定では算術オーバーフローは無視されますが、コンパイル時に/checkedオプションを付けることで例外を発生するように変更できます。算術オーバーフロー - C# 演算子 | Microsoft Docs

その状態ではSystem.OverflowExceptionが発生し、「算術演算の結果オーバーフローが発生しました。」と通知されます。

/checkedオプションは、Visual Studioではプロジェクトのプロパティの【ビルド → 詳細設定】の[演算のオーバーフローおよびアンダーフローのチェック]を有効にすることで指定できます。-checked (C# コンパイラ オプション) | Microsoft Docs

またはcheckedキーワードを指定し、特定の式またはブロックでオーバーフローが検出されるようにします。checked - checked (C# リファレンス) | Microsoft Docs

int a = int.MaxValue;
int b;

b = checked(a + 1); // checked式

checked // checkedブロック
{
    b = a + 1;
}

Mathクラス

メソッド 機能
Abs() 指定数の絶対値を返す
IEEERemainder() 指定数を別の指定数で除算した結果の剰余を返す
BigMul() 2つの指定数の完全な積を生成する
Ceiling() 指定した数以上の数のうち、最小の整数を返す
Math.Ceiling(1.2) // 2.0
Floor() 指定した数以下の数のうち、最大の整数を返す
Math.Floor(1.2) // 1.0
Round() 指定数を最も近い整数に丸める
DivRem() 2つの指定数の商を計算し、出力パラメーターの剰余を返す
Sqrt() 指定した数値の平方根を返す
Pow() 指定数を指定した値で累乗した値を返す
Exp() 指定数でeを累乗した値を返す
Log() 指定数の自然対数を返す
Log10() 指定数の底10の対数を返す
Max() 2つの指定数のうち、大きな方を返す
Min() 2つの指定数のうち、小さい方を返す
Sign() 指定数の符号を示す整数を返す
Truncate() 指定数の整数部を計算する
三角関数
メソッド 機能
Sin() 指定した角度の、サインを返す
Cos() 指定した角度の、コサインを返す
Tan() 指定した角度の、タンジェントを返す
Asin() サインが指定数となる、角度を返す
Acos() コサインが指定数となる、角度を返す
Atan() タンジェントが指定数となる、角度を返す
Atan2() タンジェントが2つの指定数の商である、角度を返す
Sinh() 指定した角度の、ハイパーボリックサインを返す
Cosh() 指定した角度の、ハイパーボリックコサインを返す
Tanh() 指定した角度の、ハイパーボリックタンジェントを返す

Round

Math.Round(1.555);     // 2
Math.Round(1.555, 2);  // 1.56
Math.Round(1.555, 10); // 1.555
public static double Round(
    double value,
    int digits,
    MidpointRounding mode
)
Math.Round メソッド (Double, Int32, MidpointRounding) (System) | MSDN

modeの指定は、評価する桁の数値が5の場合に作用します。

  • AwayFromZero … ゼロから遠い (away from zero) 値に丸められる。
  • ToEven … 最も近い偶数に (to the nearest even number) 丸められる。
MidpointRoundingの値による相違
元の番号 AwayFromZero ToEven
3.5 4
2.8 3
2.5 3 2
2.1 2
-2.1 -2
-2.5 -3 -2
-2.8 -3
-3.5 -4
MidpointRounding 列挙型 (System) | MSDN

参考

参考書

Randomクラス

乱数を取得できます。

Random random = new Random();
int a = random.Next(3);

コンストラクタ

コンストラクタ 疑似乱数シーケンスの基準
Random() システム クロック
Random(int Seed) Seedの値
コンストラクター - Random クラス (System) | MSDN

メソッド

戻り値の型 メソッド 機能
double NextDouble() 0.0以上 1.0未満の浮動小数点数が返される
void NextBytes(byte[] buffer) 0以上 Byte.MaxValue (255) 以下の整数が、引数の配列に格納される
メソッド - Random クラス (System) | MSDN
整数を返すメソッド
戻り値の型 メソッド 返される数値の範囲
int Next() 0以上 Int32.MaxValue未満
int Next(int maxValue) 0以上 maxValue未満
int Next(int minValue, int maxValue) minValue以上 maxValue未満
Random.Next メソッド (System) | MSDN
MSDN (Microsoft Developer Network) から検索