変数

変数名の付け方

変数名を決める際、日本語からネーミングを生成してくれるネーミング | codicを使うととても便利です。

どの記法でなければならないという決まりはないので自分の使いやすい記法で良いですが、記法は統一しましょう。

  1. PascalCaseパスカルケース
    変数名に含まれる単語の頭文字をすべて大文字にする記法です。プログラミング言語Pascalで使われていた記法であることが由来。
    例)UserId、CustomerName
  2. camelCaseキャメルケース
    先頭を除くすべての単語の頭文字を大文字にする記法です。単語の並びがラクダ(camel)のこぶのように見えることが由来。
    例)userId、customerName
  3. snake_case スネークケース
    単語間を_(アンダースコア)でつなげる記法。単語はすべて小文字。蛇のように見えることが由来。
    例)user_id、customer_name
  4. SNAKE_CASEスネークケース
    単語間を_(アンダーバー)でつなげる記法。単語はすべて大文字。
    例)USER_ID、CUSTOMER_NAME
  5. ハイフネーション
    単語間を-(ハイフン)でつなげる記法。ケバブケースとも言います。
    例)user-id、customer-name
  6. 変換なし
    入力された日本語を英語にします。変数名に半角スペースは使えないので、おそらく英単語を確認するためのもの。
    例)user id、customer name

以下は単語間の繋げ方のルールというよりは変数の意味をわかりやすくする+α的なもの。

  1. ハンガリアン(ハンガリー)
    変数名・関数名などに接頭辞・接尾辞をつけることで、使用方法・データ型をわかるようにしたもの。この記法の考案者がハンガリー出身であることに由来。

ハンガリアン記法

型を表す接頭辞

文字 意味 使用例
bまたはf 論理型
ch 文字型
by バイト型
nまたはi 整数型
l 長整数
u 符号なし整数
w ワード型
dw ダブルワード型
fpまたはf 単精度浮動小数点型
dbまたはd 倍精度浮動小数点型
pまたはlp ポインタ型
s 文字列型
sz ゼロ終端文字列型
fn 関数ポインタ型
h ハンドル型
hwndまたはh ウィンドウハンドル型
g_ グローバル変数
c_ 定数
c_ 静的変数
m_ クラスのメンバー変数
C クラス
tag 構造体タグ

Empty/Empty

空の状態を表す。空の配列を宣言したときの初期値。

Null/Null

2バイト整数(符号付)/SmallInt

範囲
-32,767 〜 32,768(\(-2^{15}-1\) ~ \(2^{15}\))

4バイト整数(符号付)/Integer

範囲
-2,147,483,648 ~ 2,147,483,647(\(-2^{31}-1\) ~ \(2^{31}\))

単精度浮動小数点値/Single

\[(-1)^{\mathrm{sign}} \times 2^{\mathrm{exponent} – \mathrm{exponent}\ \ \mathrm{bias}} \times 1.\mathrm{mantissa}\]
  1. \(\mathrm{sign}:符号\)
  2. \(\mathrm{exponent}:指数部\)
  3. \(\mathrm{exponent} \mathrm{bias}:指数部バイアス\)
  4. \(\mathrm{mantissa}:仮数部\)
\[1.xxxxxxxxxxxxxxxxxxxxxxx\times{2^{yyyyyyyy}}_{(2)}\]
  1. \(xxx:仮数部\)
  2. \(yyy:指数部\)
符号ビット
1ビット
指数部の幅
8ビット(ゲタ履き表現)
仮数部の幅
23ビット

符号ビットは表現する数値の符号(正負)を示します。指数部は8ビットで、符号なし整数として見た場合は0~255の値をとり、0のときは0か非正規化数であることを、1~254のときは-127のゲタ履き(バイアス付き)表現で-126~127の指数を、255のときは無限大またはNaNであることを示します。

指数部が0(0および非正規化数)の場合を除き、仮数部で表現されるビットパターンのさらにひとつ上の桁に暗黙の1のビットがあるとみなす表現法(ケチ表現)により、正規化された数の制度は、24ビットである。十進に換算したときに表現できる桁数は\(\log_{10} 2^{24} \approx 7.225\)桁となります。

指数部の符号化方式

単精度浮動小数点数の指数部はオフセット(ゲタ履き)表現を使って符号化されており、指数値が0のときオフセット値(バイアス値)は127である。

  1. \(E_{min}=01_{H}-7F_{H}=-126\)
  2. \(E_{max}=FE_{H}-7F_{H}=127\)
  3. \(exponent\ \ bias(指数バイアス)={7F}_{H}=127\)

\(00_{H}\)と\(FF_{H}\)は予約された指数値です。

負の値
\({-3.40282339717\times10^{38}}_{(10)}\) ~ \({-1.1754944\times10^{-38}}_{(10)}\)
正の値
\({1.1754944\times10^{-38}}_{(10)}\) ~ \({3.40282339717\times10^{38}}_{(10)}\)

正の最小値(単精度)

単精度浮動小数点数 正の最小値
符号
+1
仮数部
\(1.00000000000000000000000_{(2)}={2^{0}}_{(10)}=1.0_{(10)}\)
指数部
\({2^{1-127}}_{(10)}={2^{-126}}_{(10)}\)=\({\frac{1}{2^{126}}}_{(10)}\)=\({1.1754944\times10^{-38}}_{(10)}\)
符号×仮数部×指数部
\(+1 \times 1.0 \times 1.1754944 \times 10^{-38}\)=\({1.1754944 \times 10^{-38}}_{(10)}\)
\[ \begin{eqnarray} value_{min}&=&(-1)^{0} \times 2^{1-127} \times 1 \\ &=&1 \times 2^{-126} \times 1 \\ &=&1.175494351 \times 10^{-38} \end{eqnarray} \]

正の最大値(単精度)

単精度浮動小数点数 正の最大値 \[2^{0},2^{-1},2^{-2},…,2^{-23}\]
  1. \(初項:a=1\)
  2. \(公比:r=0.5\)
  3. \(項数:n=24\)
仮数部
\(S=\frac{a(1-r^{n})}{1-r}=\frac{1-0.5^{24}}{1-0.5}=\frac{1-0.5^{24}}{0.5}={1.99999988079}_{(10)}\)
指数部
\({2^{254-127}}_{(10)}={2^{127}}_{(10)}\)=\({1.7014118\times10^{38}}_{(10)}\)
仮数部×指数部
\(1.99999988079\times1.7014118\times10^{38}\)=\({3.40282339717\times10^{38}}_{(10)}\)
\[ \begin{eqnarray} value_{max}&=&(-1)^{0} \times 2^{2^{8}-127} \times 1.99999988079 \\ &=&1 \times 2^{254-127} \times 1.99999988079 \\ &=&3.4028235 \times 10^{38} \end{eqnarray} \]

負の最小値(単精度)

単精度浮動小数点数 負の最小値
符号
-1
仮数部
\(S=\frac{a(a-r^{n})}{1-r}=\frac{1-0.5^{24}}{1-0.5}=\frac{1-0.5^{24}}{0.5}=1.99999988079_{(10)}\)
指数部
\({2^{254-127}}_{(10)}={2^{127}}_{(10)}=1.7014118 \times {10^{38}}_{(10)}\)
符号×仮数部×指数部
\(-1 \times 1.99999988079 \times 1.7014118 \times 10^{38}=-3.4282339717 \times {10^{38}}_{(10)}\)
\[ \begin{eqnarray} value_{min}&=&(-1)^{1} \times 2^{254-127} \times 1 \\ &=&-1 \times 2^{127} \times 1 \\ &=&-3.4028235 \times 10^{38} \end{eqnarray} \]

負の最大値(単精度)

単精度浮動小数点数 負の最大値
符号
-1
仮数部
\(1.00000000000000000000000_{(2)}={2^{0}}_{(10)}=1.0_{(10)}\)
指数部
\({2^{1-127}}_{(10)}={2^{-126}}_{(10)}\)=\({\frac{1}{2^{126}}}_{(10)}\)=\({1.1754944\times10^{-38}}_{(10)}\)
符号×仮数部×指数部
\(-1 \times 1.0 \times 1.1754944 \times 10^{-38}\)=\({1.1754944 \times 10^{-38}}_{(10)}\)
\[ \begin{eqnarray} value_{max}&=&(-1)^{1} \times 2^{1-127} \times 1 \\ &=&-1 \times 2^{-126} \times 1 \\ &=&-1.175494351 \times 10^{-38} \end{eqnarray} \]

倍精度浮動小数点値/Double

-1.79769313486232E+308 ~ -4.94065645841247E-324(負の値)
4.94065645841247E-324 ~ 1.79769313486232E+308(正の値)
\[(-1)^{\mathrm{sign}} \times 2^{\mathrm{exponent} – \mathrm{exponent}\ \ \mathrm{bias}} \times 1.\mathrm{mantissa}\]
  1. \(\mathrm{sign}:符号\)
  2. \(\mathrm{exponent}:指数部\)
  3. \(\mathrm{exponent} \mathrm{bias}:指数部バイアス\)
  4. \(\mathrm{mantissa}:仮数部\)
符号
1ビット
指数部(ゲタ履き表現)
11ビット(-1022~1023)
仮数部
52ビット
負の値
正の値
\({1.7976932\times10^{308}}_{(10)}\)

指数部の符号化方式

倍精度浮動小数点数の指数部はオフセット(ゲタ履き)表現を使って符号化されており、指数値が0のときオフセット値(バイアス値)は1023である。

  1. \(E_{min}=01_{H}-3FF_{H}=-1022\)
  2. \(E_{max}=7FE_{H}-3FF_{H}=1024\)
  3. \(exponent\ \ bias(指数バイアス)={3FF}_{H}=1023\)

\(00_{H}\)と\(FF_{H}\)は予約された指数値です。

正の最小値(倍精度)

倍精度浮動小数点数 正の最小値
符号
+1
仮数部
\(2^{0}\times1+2^{-1}\times0+2^{-2}\times0+2^{-3}\times0+…+2^{-52}\times0=2.0\)
指数部
\({2^{1-1023}}_{(10)}={2^{-1022}}_{(10)}=2.225074 \times 10^{-308}\)
符号×仮数部×指数部
\(+1 \times 2.0 \times 2.225074 \times 10^{-308}=4.450148 \times 10^{-308}\)
\[ \begin{eqnarray} value_{min}&=&(-1)^{0} \times 2^{1-1023} \times 2 \\ &=&1 \times 2^{-1022} \times 2 \\ &=&4.450148 \times 10^{-308} \\ \end{eqnarray} \]

正の最大値(倍精度)

倍精度浮動小数点数 正の最大値
符号
+1
仮数部
\[2^{0} \times 1, \quad 2^{-1} \times 1, \quad 2^{-2} \times 1, \quad 2^{-3} \times 1, \quad …, \quad 2^{-52} \times 1\] \[S=\frac{a(1-r^n)}{1-r}=\frac{1 \times (1-0.5^{53})}{1-0.5}=2.0\]
指数部
\({2^{2046-1023}}_{(10)}={2^{1023}}_{(10)}=8.988466\times10^{307}\)
符号×仮数部×指数部
\(+1 \times 2.0\times8.988466\times10^{307}=1.7976932\times10^{308}\)
\[ \begin{eqnarray} value_{max}&=&(-1)^{0} \times 2^{2046-1023} \times 2 \\ &=&1 \times 2^{1023} \times 2 \\ &=&1.7976932 \times 10^{308} \\ \end{eqnarray} \]

負の最小値(倍精度)

倍精度浮動小数点数 負の最小値
符号
-1
仮数部
\[2^{0} \times 1, \quad 2^{-1} \times 1, \quad 2^{-2} \times 1, \quad 2^{-3} \times 1, \quad …, \quad 2^{-52} \times 1\] \[S=\frac{a(1-r^n)}{1-r}=\frac{1 \times (1-0.5^{53})}{1-0.5}=2.0\]
指数部
\({2^{2046-1023}}_{(10)}={2^{1023}}_{(10)}=8.988466\times10^{307}\)
符号×仮数部×指数部
\(-1 \times 2.0\times8.988466\times10^{307}=-1.7976932\times10^{308}\)
\[ \begin{eqnarray} value_{min}&=&(-1)^{1} \times 2^{2046-1023} \times 2 \\ &=&-1 \times 2^{1023} \times 2 \\ &=&-1.7976932 \times 10^{308} \\ \end{eqnarray} \]

負の最大値(倍精度)

倍精度浮動小数点数 負の最大値
符号
-1
仮数部
\(2^{0}\times1+2^{-1}\times0+2^{-2}\times0+2^{-3}\times0+…+2^{-52}\times0=2.0\)
指数部
\({2^{1-1023}}_{(10)}={2^{-1022}}_{(10)}=2.225074 \times 10^{-308}\)
符号×仮数部×指数部
\(-1 \times 2.0 \times 2.225074 \times 10^{-308}=-4.450148 \times 10^{-308}\)
\[ \begin{eqnarray} value_{max}&=&(-1)^{1} \times 2^{1-1023} \times 2 \\ &=&-1 \times 2^{-1022} \times 2 \\ &=&-4.450148 \times 10^{-308} \\ \end{eqnarray} \]

通貨型/Currency

-922,337,203,685,477.5808 ~ 922,337,203,685,477.5807

日付型/Date

範囲
-657,434 ~ 2,958,465(100/01/01 ~ 9999/12/31)
PRINT VARTYPE(-657434, VAR_DATE)	// 100/01/01
PRINT VARTYPE(2958465, VAR_DATE)	// 9999/12/31

オブジェクト/Dispatch

エラー値/Error

ブール型/Boolean

バリアント/Variant

未定義のオブジェクト/Unknown

1バイト整数(符号付き)/SByte

-128 ~ 127

1バイト整数(符号なし)/Byte

0 ~ 255

2バイト整数(符号なし)/Word

0 ~ 65,535

4バイト整数(符号なし)/DWord

0 ~ 4,294,967,295

8バイト整数(符号付き)/Int64

-9,223,372,036,854,775,808 ~ 9,223,372,036,854,775,807

ANSI文字列/AStr

UNICODE文字列/UStr

配列/Array

データ型 範囲
Empty/Empty
Null/Null
2バイト整数(符号付)/SmallInt -32,767~32,768
4バイト整数(符号付)/Integer -2,147,483,648 ~ 2,147,483,647
単精度浮動小数点値/Single -3.402823E+38 ~ -1.401298E-45(負の値)
1.401298E-45 ~ 3.402823E+38(正の値)
倍精度浮動小数点値/Double -1.79769313486232E+308 ~ -4.94065645841247E-324(負の値)
4.94065645841247E-324 ~ 1.79769313486232E+308(正の値)
通貨型/Currency -922,337,203,685,477.5808 ~ 922,337,203,685,477.5807
日付型/Date -657,434 ~ 2,958,465(100/01/01 ~ 9999/12/31)
オブジェクト/Dispatch
エラー値/Error
ブール型/Boolean
バリアント/Variant
未定義のオブジェクト/Unknown
1バイト整数(符号付き)/SByte -128 ~ 127
1バイト整数(符号なし)/Byte 0 ~ 255
2バイト整数(符号なし)/Word 0 ~ 65,535
4バイト整数(符号なし)/DWord 0 ~ 4,294,967,295
8バイト整数(符号付き)/Int64 -9,223,372,036,854,775,808 ~ 9,223,372,036,854,775,807
ANSI文字列/AStr
UNICODE文字列/UStr
配列/Array