Visual Basic は、オペランドのデータ型に基づいて、演算の結果データ型を決定します。 場合によっては、どちらのオペランドよりも範囲が大きいデータ型である可能性があります。
データ型の範囲
関連するデータ型の範囲は、最小から最大の順に次のとおりです。
ブール値 — 2 つの可能な値
Integer,UInteger — 4,294,967,296 (4.2...E+9) 可能な整数値
Long、 ULong — 18,446,744,073,709,551,615 (1.8...E+19) 可能な整数値
Decimal — 1.5...E+29 個の整数値、最大範囲 7.9...E+28 (絶対値)
単一 — 最大範囲 3.4...E+38 (絶対値)
Double — 最大範囲 1.7...E+308 (絶対値)
Visual Basic のデータ型の詳細については、「データ型」を参照 してください。
オペランドが Nothing に評価された場合、Visual Basic 算術演算子はそれを 0 として扱います。
10 進演算
Decimal データ型は浮動小数点でも整数でもないことに注意してください。
+
、–
、*
、/
、またはMod
のいずれかの演算のオペランドがDecimal
され、もう一方のオペランドがSingle
またはDouble
されていない場合、Visual Basic はもう一方のオペランドを拡大してDecimal
します。
Decimal
で操作を実行し、結果のデータ型がDecimal
。
Floating-Point 算術演算
Visual Basic では、このような操作で最も効率的なデータ型である Double でほとんどの浮動小数点演算が実行されます。 ただし、一方のオペランドが Single で、もう一方のオペランドが Double
されていない場合、Visual Basic は Single
で操作を実行します。 各オペランドは、演算の前に必要に応じて適切なデータ型に拡大され、結果にはそのデータ型が含まれます。
/ および ^ 演算子
/
演算子は、Decimal、Single、Double のデータ型に対してのみ定義されます。 Visual Basic では、演算の前に各オペランドが必要に応じて適切なデータ型に拡大され、結果にはそのデータ型が含まれます。
次の表に、 /
演算子の結果データ型を示します。 このテーブルは対称であることに注意してください。オペランドデータ型の特定の組み合わせの場合、結果のデータ型はオペランドの順序に関係なく同じです。
Decimal |
Single |
Double |
任意の整数型 | |
---|---|---|---|---|
Decimal |
Decimal | シングル | ダブル | Decimal |
Single |
シングル | シングル | ダブル | シングル |
Double |
ダブル | ダブル | ダブル | ダブル |
任意の整数型 | Decimal | シングル | ダブル | ダブル |
^
演算子は、Double
データ型に対してのみ定義されます。 Visual Basic では、演算の前に Double
するために必要に応じて各オペランドが拡大され、結果のデータ型は常に Double
。
整数演算
整数演算の結果データ型は、オペランドのデータ型によって異なります。 一般に、Visual Basic では、結果のデータ型を決定するために次のポリシーが使用されます。
2 項演算子の両方のオペランドが同じデータ型を持つ場合、結果にはそのデータ型が含まれます。 例外が
Boolean
され、Short
が強制されます。符号なしオペランドが符号付きオペランドと一緒に参加する場合、結果は、少なくともいずれかのオペランドと同じ範囲の符号付き型になります。
それ以外の場合、結果は通常、2 つのオペランド データ型のうち大きくなります。
結果データ型は、どちらのオペランド データ型と同じでもない場合があることに注意してください。
注
結果データ型は、操作の結果として得られるすべての可能な値を保持するのに十分な大きさであるとは限りません。 結果のデータ型に対して値が大きすぎると、 OverflowException 例外が発生する可能性があります。
単項 + 演算子と – 演算子
次の表は、 +
と –
の 2 つの単項演算子の結果データ型を示しています。
Boolean |
SByte |
Byte |
Short |
UShort |
Integer |
UInteger |
Long |
ULong |
|
---|---|---|---|---|---|---|---|---|---|
単項 + |
短い | SByte | バイト | 短い | UShort | 整数 | UInteger | Long | ULong |
単項 – |
短い | SByte | 短い | 短い | 整数 | 整数 | Long | Long | Decimal |
<< および >> 演算子
次の表は、 <<
と >>
の 2 つのビットシフト演算子の結果データ型を示しています。 Visual Basic では、各ビットシフト演算子を左オペランド (シフトするビット パターン) の単項演算子として扱います。
Boolean |
SByte |
Byte |
Short |
UShort |
Integer |
UInteger |
Long |
ULong |
|
---|---|---|---|---|---|---|---|---|---|
<< , >> |
短い | SByte | バイト | 短い | UShort | 整数 | UInteger | Long | ULong |
左側のオペランドが Decimal
、 Single
、 Double
、または String
の場合、Visual Basic は操作の前に Long
に変換を試み、結果のデータ型は Long
。 右オペランド (シフトするビット位置の数) は、 Integer
または Integer
に拡大する型である必要があります。
二項 +、–、*、および Mod 演算子
次の表に、二項 +
演算子と –
演算子の結果データ型と、 *
演算子と Mod
演算子を示します。 このテーブルは対称であることに注意してください。オペランドデータ型の特定の組み合わせの場合、結果のデータ型はオペランドの順序に関係なく同じです。
Boolean |
SByte |
Byte |
Short |
UShort |
Integer |
UInteger |
Long |
ULong |
|
---|---|---|---|---|---|---|---|---|---|
Boolean |
短い | SByte | 短い | 短い | 整数 | 整数 | Long | Long | Decimal |
SByte |
SByte | SByte | 短い | 短い | 整数 | 整数 | Long | Long | Decimal |
Byte |
短い | 短い | バイト | 短い | UShort | 整数 | UInteger | Long | ULong |
Short |
短い | 短い | 短い | 短い | 整数 | 整数 | Long | Long | Decimal |
UShort |
整数 | 整数 | UShort | 整数 | UShort | 整数 | UInteger | Long | ULong |
Integer |
整数 | 整数 | 整数 | 整数 | 整数 | 整数 | Long | Long | Decimal |
UInteger |
Long | Long | UInteger | Long | UInteger | Long | UInteger | Long | ULong |
Long |
Long | Long | Long | Long | Long | Long | Long | Long | Decimal |
ULong |
Decimal | Decimal | ULong | Decimal | ULong | Decimal | ULong | Decimal | ULong |
\演算子
次の表に、 \
演算子の結果データ型を示します。 このテーブルは対称であることに注意してください。オペランドデータ型の特定の組み合わせの場合、結果のデータ型はオペランドの順序に関係なく同じです。
Boolean |
SByte |
Byte |
Short |
UShort |
Integer |
UInteger |
Long |
ULong |
|
---|---|---|---|---|---|---|---|---|---|
Boolean |
短い | SByte | 短い | 短い | 整数 | 整数 | Long | Long | Long |
SByte |
SByte | SByte | 短い | 短い | 整数 | 整数 | Long | Long | Long |
Byte |
短い | 短い | バイト | 短い | UShort | 整数 | UInteger | Long | ULong |
Short |
短い | 短い | 短い | 短い | 整数 | 整数 | Long | Long | Long |
UShort |
整数 | 整数 | UShort | 整数 | UShort | 整数 | UInteger | Long | ULong |
Integer |
整数 | 整数 | 整数 | 整数 | 整数 | 整数 | Long | Long | Long |
UInteger |
Long | Long | UInteger | Long | UInteger | Long | UInteger | Long | ULong |
Long |
Long | Long | Long | Long | Long | Long | Long | Long | Long |
ULong |
Long | Long | ULong | Long | ULong | Long | ULong | Long | ULong |
\
演算子のいずれかのオペランドが Decimal、Single、または Double の場合、Visual Basic は操作の前に Long に変換を試み、結果のデータ型はLong
。
リレーショナル比較とビットごとの比較
リレーショナル操作の結果データ型 (=
、<>
、<
、>
、<=
、>=
) は常にboolean データ型Boolean
。 オペランドの論理演算 (And
、 AndAlso
、 Not
、 Or
、 OrElse
、 Xor
) についても同様 Boolean
。
ビットごとの論理演算の結果データ型は、オペランドのデータ型によって異なります。
AndAlso
とOrElse
はBoolean
に対してのみ定義され、Visual Basic では、操作を実行する前に各オペランドが必要に応じてBoolean
に変換されることに注意してください。
=、 <>、 <、 >、 <=、および >= 演算子
両方のオペランドが Boolean
されている場合、Visual Basic では True
が False
未満であると見なされます。 数値型が String
と比較される場合、Visual Basic は操作の前に String
を Double
に変換しようとします。
Char
またはDate
オペランドは、同じデータ型の別のオペランドとのみ比較できます。 結果データ型は常に Boolean
。
ビットごとの Not 演算子
次の表に、ビットごとの Not
演算子の結果データ型を示します。
Boolean |
SByte |
Byte |
Short |
UShort |
Integer |
UInteger |
Long |
ULong |
|
---|---|---|---|---|---|---|---|---|---|
Not |
ブール値 | SByte | バイト | 短い | UShort | 整数 | UInteger | Long | ULong |
オペランドが Decimal
、 Single
、 Double
、または String
の場合、Visual Basic は演算の前に Long
に変換を試み、結果のデータ型が Long
されます。
ビットごとの And 演算子、Or 演算子、Xor 演算子
次の表に、ビットごとの And
、 Or
、および Xor
演算子の結果データ型を示します。 このテーブルは対称であることに注意してください。オペランドデータ型の特定の組み合わせの場合、結果のデータ型はオペランドの順序に関係なく同じです。
Boolean |
SByte |
Byte |
Short |
UShort |
Integer |
UInteger |
Long |
ULong |
|
---|---|---|---|---|---|---|---|---|---|
Boolean |
ブール値 | SByte | 短い | 短い | 整数 | 整数 | Long | Long | Long |
SByte |
SByte | SByte | 短い | 短い | 整数 | 整数 | Long | Long | Long |
Byte |
短い | 短い | バイト | 短い | UShort | 整数 | UInteger | Long | ULong |
Short |
短い | 短い | 短い | 短い | 整数 | 整数 | Long | Long | Long |
UShort |
整数 | 整数 | UShort | 整数 | UShort | 整数 | UInteger | Long | ULong |
Integer |
整数 | 整数 | 整数 | 整数 | 整数 | 整数 | Long | Long | Long |
UInteger |
Long | Long | UInteger | Long | UInteger | Long | UInteger | Long | ULong |
Long |
Long | Long | Long | Long | Long | Long | Long | Long | Long |
ULong |
Long | Long | ULong | Long | ULong | Long | ULong | Long | ULong |
オペランドが Decimal
、 Single
、 Double
、または String
の場合、Visual Basic は演算の前にオペランドを Long
に変換しようとします。結果のデータ型は、そのオペランドが既に Long
されている場合と同じです。
その他の演算子
&
演算子は、String
オペランドを連結する場合にのみ定義されます。 Visual Basic では、各オペランドを演算の前に String
するために必要に応じて変換され、結果のデータ型は常に String
されます。
&
演算子の目的上、String
へのすべての変換は、Option Strict
がOn
されている場合でも拡大すると見なされます。
Is
演算子とIsNot
演算子では、両方のオペランドが参照型である必要があります。
TypeOf
...Is
式では、最初のオペランドが参照型で、2 番目のオペランドがデータ型の名前である必要があります。 これらすべての場合、結果データ型は Boolean
。
Like
演算子は、String
オペランドのパターン マッチングに対してのみ定義されます。 Visual Basic では、必要に応じて各オペランドの変換が試行され、操作の前に String
されます。 結果データ型は常に Boolean
。
こちらも参照ください
.NET