ここではVB.NETの演算子について見ていきます。

Sponsored Link

基本的な算術演算子

基本的な演算子はVB6とほぼ同じです。

Dim i As Integer

i = 1 + 2   ' 加算 i = 3
i = 3 - 1   ' 減算 i = 2
i = 4 * 3   ' 乗算 i = 12
i = 6 / 2   ' 除算 i = 3
i = 5 Mod 3 ' 剰余 i = 2
i = 5 \ 3   ' 商 i = 1
i = 2 ^ 3   ' べき乗 i = 8

Dim s As String = "String"

s = s + "文字列" ' 文字列の連結 s = "String文字列"
s = s & "String" ' 文字列の連結 s = "String文字列String"

複合代入演算子

VB.NETからは複合代入演算子が使用できるようになりました。 しかしながら、インクリメント演算子(++)、ディクリメント演算子(--)は存在しません。 また残念ながら、Modについては複合代入演算子が用意されていません。

Dim i As Integer = 5

i += 1 ' i = i + 1 と 等価
i -= 2 ' i = i - 2 と 等価
i *= 3 ' i = i * 3 と 等価
i /= 4 ' i = i * 4 と 等価
i \= 5 ' i = i \ 5 と 等価
i ^= 6 ' i = i ^ 6 と 等価

Dim s As String = "String"

s += "文字列" ' s = s + "文字列" と 等価
s &= "String" ' s = s & "String" と 等価

論理演算子

VB.NETでの論理演算子はVB6以前の論理演算子と代わりありません。

Dim b, b1, b2 As Boolean

b1 = True
b2 = False

b = b1 Or b2 ' b = True
b = b1 And b2 ' b = False
b = b1 Xor b2 ' b = True
b = Not b1 ' b = False

VB.NETでは新たにAndAlsoとOrElseという演算子が追加されました。 これはショートサーキットによる評価を行うための演算子で、第一項がFalseの場合、AndAlsoは第二項を評価せずにFalseを返します。 同様に、第一項がTrueの場合、OrElseは第二項を評価せずに Trueを返します。 これらの真理値表をまとめると次のようになります。

Or演算子の真理値表
第一項 第二項 結果
False False False
False True True
True False True
True True True
OrElse演算子の真理値表
第一項 第二項 結果
False False False
False True True
True (評価しない) True
And演算子の真理値表
第一項 第二項 結果
False False False
False True False
True False False
True True True
AndAlso演算子の真理値表
第一項 第二項 結果
False (評価しない) False
True False False
True True True

Eqv演算子、Imp演算子

VB6以前に存在したEqv, Imp演算子はVB.NETではなくなりました。 これらの演算子と同様の結果を得るには次のようにします

Dim b, b1, b2 As Boolean

' Eqv演算子、Imp演算子と同じ結果を得る方法
b = (b1 = b2) ' VB6以前の「b = b1 Eqv b2」と等価
b = (Not b1) Or b2 ' VB6以前の「b = b1 Imp b2」と等価

ビットシフト演算子

VB.NET 2003(Visual Studio .NET 2003)からは、VB.NETでも算術ビットシフト演算子がサポートされるようになりました。 ビットシフト演算子はその名の通り、数のビット表記に対してその表記を右または左にシフトする演算子です。

算術的には、1ビット右にシフトする事は数を2で除することと等しく、1ビット左にシフトする事は数を2で乗ずる事と等しい演算です。 なお、ビットシフト演算子はその特性上、整数型(Byte, Short, Integer, Long)に対してのみ使用できます。 ビットシフト演算子は、下の例のようにシフトする対称の値を演算子の左の項に書き、右側にシフトする量を記述します。

Dim i As Integer

i = 8 >> 2 ' 算術右シフト i = 2
i = 3 << 2 ' 算術左シフト i = 12

i = 5
i = i >> 1 ' 算術右シフト i = 2
i = i << 3 ' 算術左シフト i = 16
> 2 ' 算術右シフト i = 2
i = 3 << 2 ' 算術左シフト i = 12

i = 5
i = i >> 1 ' 算術右シフト i = 2
i = i << 3 ' 算術左シフト i = 16]]>

また、ビットシフトと代入を同時に行う複合代入演算子も用意されています。

Dim i As Integer

i = 5
i >>= 1 ' 算術右シフト i = 2
i <<= 3 ' 算術左シフト i = 16
>= 1 ' 算術右シフト i = 2
i <<= 3 ' 算術左シフト i = 16]]>