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