第2講 変数を理解しよう!
第6話 バイト型とブール型
今まで文字型、整数型、単精度浮動小数点型、長整数型、倍精度浮動小数点型を見てきました。
データ量が違いますので、当然必要メモリが違います。
それぞれString型2バイト、Integer型2バイト、Single型4バイト、Long型4バイト、Double型8バイトです。
また、VBAでは変数の宣言をしないで変数を使うことが出来ますが、
宣言をしないと自動的にバリアント(Variant)型となります。バリアント型は、扱えるデータ範囲は倍精度浮動小数点型と同じですが、
メモリは倍の16バイトになってしまいます。
現在作っている程度のプログラムであれば、16バイトも食うバリアント型でも問題ありませんが、
この講義でも、後に数独問題作成ソフトや魔方陣作成ソフトなどの計算量の膨大なプログラムを扱います。
計算速度に決定的な影響を与えるのが、必要メモリです。
この話の前半で扱うバイト型は必要メモリは1バイトです。
バイト型は
Dim a As Byte
と宣言して使いますが、もしこれを省略して変数aを使うと自動的に16バイトも食うバリアント型になってしまいます。
もちろん、計算時間はメモリに単純比例するではありませんので、
Dim a As Byte
と宣言して使った方が16倍も速くなるわけではありませんが、かなりの差が生じます。
プログラムコードは学習が進んだ段階で説明しますが、
次のコードで実験すると
Private Sub CommandButton1_Click()
Dim n As Byte
Dim a1 As Byte, a2 As Byte, a3 As Byte, a4 As Byte, a As Byte
Dim t1 As Double, t2 As Double
n = 250
t1 = Timer
a = 0
For a1 = 0 To n
For a2 = 0 To n
For a3 = 0 To n
For a4 = 0 To n
a = (a + 1) Mod n
Next
Next
Next
Next
t2 = Timer
Cells(6, 2) = t2 - t1
t1 = Timer
b = 0
For b1 = 0 To n
For b2 = 0 To n
For b3 = 0 To n
For b4 = 0 To n
b = (b + 1) Mod n
Next
Next
Next
Next
t2 = Timer
Cells(7, 2) = t2 - t1
End Sub
Private Sub CommandButton2_Click()
Columns("B:O").Select
Selection.ClearContents
Cells(1, 1).Select
End Sub
実験結果例
バイト型の方が約2.5倍速いわけです。かなりの差を生んでいることがわかります。
プログラムの内容によって、速度比は変わってきます。
私の記憶では、数独問題作成ソフトVer7の場合は、軽く4倍以上違いました。
ですから、プログラムの内容によっては5,6倍違うケースもあるでしょう。
バイト型は、範囲は0〜255です。
ですから、データが255以下の整数であるとわかっている場合は、バイト型を使用すべきなのです。
値を真(True)と偽(False)しか持たないブール型というものあります。
しかし、バイト数はByte型の2倍の2バイトです。
バイト型変数で1を真、0を偽とすれば、ブール型の代わりに出来ます。
何を真とするかは、プログラマーに任されています。
ですから、私のお薦めはByte型をブール型の代わりに使うことです。
どのように使うかの具体例は、If文の学習のときに示します。
まとめとして、その他の変数型も含めて表に示しましょう。
データ型 | 容量 | 扱える範囲 |
バイト型(Byte) | 1バイト | 0〜255 |
ブール型(Boolean) | 2バイト | TeueとFalse |
整数型(Integer) | 2バイト | -32,768 〜 32,767 |
長整数型(Long) | 4バイト | -2,147,483,648〜2,147,483,647 |
単精度浮動小数点型(Single) | 4バイト | ±1.401298E-45〜3.402823E38 |
倍精度浮動小数点(Double) | 8バイト | ±4.94065645841247E-324〜1.79769313486232E308 |
通貨型 (Currency) | 8バイト | -922,337,203,685,477.5808 〜 922,337,203,685,477.5807 |
日付型 (Date) | 8バイト | 西暦100年1月1日0:00:00 〜西暦9999年12月31日23:59:59? |
vc++講義へ
vb講義へ
VB講義基礎へ
初心者のための世界で一番わかりやすいVisual C++入門基礎講座へ
初心者のための世界で一番わかりやすいVisual Basic入門基礎講座へ
数学研究室に戻る