Typy danych wyników operatora (Visual Basic)
Visual Basic określa typ danych wynikowych operacji na podstawie typów danych operandów. W niektórych przypadkach może to być typ danych o większym zakresie niż w przypadku dowolnego operandu.
Zakresy typu danych
Zakresy odpowiednich typów danych, w kolejności od najmniejszej do największej, są następujące:
Wartość logiczna — dwie możliwe wartości
Krótki, UShort — 65 536 (6,5...E+4) możliwe wartości całkowite
Liczba całkowita, liczba całkowita U — 4,294,967,296 (4.2...E+9) możliwe wartości całkowite
Long, ULong — 18,446,744,073,709,551,615 (1,8...E+19) możliwe wartości całkowite
Dziesiętne — 1,5...E+29 możliwych wartości całkowitych, maksymalny zakres 7,9...E+28 (wartość bezwzględna)
Pojedynczy — maksymalny zakres 3,4...E+38 (wartość bezwzględna)
Podwójne — maksymalny zakres 1,7...E+308 (wartość bezwzględna)
Aby uzyskać więcej informacji na temat typów danych języka Visual Basic, zobacz Typy danych.
Jeśli operand zwróci wartość Nothing, operatory arytmetyczne języka Visual Basic traktują je jako zero.
Arytmetyka dziesiętna
Należy pamiętać, że typ danych dziesiętnych nie jest ani zmiennoprzecinkowym, ani liczbą całkowitą.
Jeśli operand operacji +
, , –
*
, /
lub Mod
jest Decimal
inny, a drugi nie Single
lub Double
, Visual Basic rozszerza inny operand na Decimal
. Wykonuje operację w pliku Decimal
, a typ danych wynikowych to Decimal
.
Arytmetyka zmiennoprzecinkowa
Język Visual Basic wykonuje większość arytmetyki zmiennoprzecinkowych w podwójnej, która jest najbardziej wydajnym typem danych dla takich operacji. Jeśli jednak jeden operand ma wartość Pojedyncza , a drugi nie Double
, program Visual Basic wykonuje operację w programie Single
. Rozszerza on każdy operand zgodnie z potrzebami do odpowiedniego typu danych przed operacją, a wynik ma ten typ danych.
/ i ^ Operatory
Operator /
jest definiowany tylko dla typów danych Liczba dziesiętna, Pojedyncza i Podwójna . Język Visual Basic rozszerza każdy operand zgodnie z potrzebami do odpowiedniego typu danych przed operacją, a wynik ma ten typ danych.
W poniższej tabeli przedstawiono typy danych wyników dla /
operatora. Należy pamiętać, że ta tabela jest symetryczna; dla danej kombinacji typów danych operandu typ danych wynikowych jest taki sam, niezależnie od kolejności operandów.
Decimal |
Single |
Double |
Dowolny typ liczby całkowitej | |
---|---|---|---|---|
Decimal |
Dziesiętne | Pojedynczy | Liczba rzeczywista | Dziesiętne |
Single |
Niebędący/niebędąca w związku | Niebędący/niebędąca w związku | Liczba rzeczywista | Pojedynczy |
Double |
Liczba rzeczywista | Liczba rzeczywista | Liczba rzeczywista | Liczba rzeczywista |
Dowolny typ liczby całkowitej | Dziesiętne | Pojedynczy | Liczba rzeczywista | Liczba rzeczywista |
Operator ^
jest zdefiniowany tylko dla Double
typu danych. Język Visual Basic rozszerza każdy operand zgodnie z potrzebami przed Double
operacją, a typ danych wynikowych to zawsze Double
.
Arytmetyka całkowita
Typ danych wynikowych operacji całkowitej zależy od typów danych operandów. Ogólnie rzecz biorąc, program Visual Basic używa następujących zasad do określania typu danych wynikowych:
Jeśli oba operandy operatora binarnego mają ten sam typ danych, wynik ma ten typ danych. Wyjątek to
Boolean
, który jest zmuszony doShort
.Jeśli niepodpisany operand uczestniczy z podpisanym operandem, wynik ma podpisany typ z co najmniej tak dużym zakresem jak operand.
W przeciwnym razie wynik zwykle ma większe dwa typy danych operandu.
Należy pamiętać, że typ danych wynikowych może nie być taki sam jak typ danych operandu.
Uwaga
Typ danych wynikowych nie zawsze jest wystarczająco duży, aby przechowywać wszystkie możliwe wartości wynikające z operacji. Wyjątek OverflowException może wystąpić, jeśli wartość jest zbyt duża dla typu danych wynikowych.
Jednoargumentowe + i — operatory
W poniższej tabeli przedstawiono typy danych wyników dla dwóch operatorów +
jednoargumentowych i –
.
Boolean |
SByte |
Byte |
Short |
UShort |
Integer |
UInteger |
Long |
ULong |
|
---|---|---|---|---|---|---|---|---|---|
Jednoargumentowy + |
Krótkie | SByte | Byte | Krótkie | Ushort | Integer | Uinteger | Długi | Ulong |
Jednoargumentowy – |
Krótkie | SByte | Krótkie | Krótkie | Integer | Integer | Długi | Długi | Dziesiętne |
<<operatory i >>
W poniższej tabeli przedstawiono typy danych wynikowych dla dwóch operatorów <<
przesunięcia bitowego i >>
. Visual Basic traktuje każdy operator przesunięcia bitowego jako operator jednoargumentowy na lewym operandzie (wzorzec bitowy, który ma zostać przesunięty).
Boolean |
SByte |
Byte |
Short |
UShort |
Integer |
UInteger |
Long |
ULong |
|
---|---|---|---|---|---|---|---|---|---|
<< , >> |
Krótkie | SByte | Byte | Krótkie | Ushort | Integer | Uinteger | Długi | Ulong |
Jeśli lewy operand to Decimal
, , Double
Single
lub String
, Visual Basic próbuje przekonwertować go na Long
przed operacją, a typ danych wynikowych to Long
. Prawy operand (liczba pozycji bitowych do przesunięcia) musi być Integer
lub typem, który rozszerza wartość .Integer
Operatory binarne +, –, *i mod
W poniższej tabeli przedstawiono typy danych wynikowych dla operatorów binarnych +
i –
operatorów i *
.Mod
Należy pamiętać, że ta tabela jest symetryczna; dla danej kombinacji typów danych operandu typ danych wynikowych jest taki sam, niezależnie od kolejności operandów.
Boolean |
SByte |
Byte |
Short |
UShort |
Integer |
UInteger |
Long |
ULong |
|
---|---|---|---|---|---|---|---|---|---|
Boolean |
Krótkie | SByte | Krótkie | Krótkie | Integer | Integer | Długi | Długi | Dziesiętne |
SByte |
SByte | SByte | Krótkie | Krótkie | Integer | Integer | Długi | Długi | Dziesiętne |
Byte |
Krótkie | Krótkie | Byte | Krótkie | Ushort | Integer | Uinteger | Długi | Ulong |
Short |
Krótkie | Krótkie | Krótkie | Krótkie | Integer | Integer | Długi | Długi | Dziesiętne |
UShort |
Integer | Integer | Ushort | Integer | Ushort | Integer | Uinteger | Długi | Ulong |
Integer |
Integer | Integer | Integer | Integer | Integer | Integer | Długi | Długi | Dziesiętne |
UInteger |
Długi | Długi | Uinteger | Długi | Uinteger | Długi | Uinteger | Długi | Ulong |
Long |
Długi | Długi | Długi | Długi | Długi | Długi | Długi | Długi | Dziesiętne |
ULong |
Dziesiętne | Dziesiętne | Ulong | Dziesiętne | Ulong | Dziesiętne | Ulong | Dziesiętne | Ulong |
\ — Operator
W poniższej tabeli przedstawiono typy danych wyników dla \
operatora. Należy pamiętać, że ta tabela jest symetryczna; dla danej kombinacji typów danych operandu typ danych wynikowych jest taki sam, niezależnie od kolejności operandów.
Boolean |
SByte |
Byte |
Short |
UShort |
Integer |
UInteger |
Long |
ULong |
|
---|---|---|---|---|---|---|---|---|---|
Boolean |
Krótkie | SByte | Krótkie | Krótkie | Integer | Integer | Długi | Długi | Długi |
SByte |
SByte | SByte | Krótkie | Krótkie | Integer | Integer | Długi | Długi | Długi |
Byte |
Krótkie | Krótkie | Byte | Krótkie | Ushort | Integer | Uinteger | Długi | Ulong |
Short |
Krótkie | Krótkie | Krótkie | Krótkie | Integer | Integer | Długi | Długi | Długi |
UShort |
Integer | Integer | Ushort | Integer | Ushort | Integer | Uinteger | Długi | Ulong |
Integer |
Integer | Integer | Integer | Integer | Integer | Integer | Długi | Długi | Długi |
UInteger |
Długi | Długi | Uinteger | Długi | Uinteger | Długi | Uinteger | Długi | Ulong |
Long |
Długi | Długi | Długi | Długi | Długi | Długi | Długi | Długi | Długi |
ULong |
Długi | Długi | Ulong | Długi | Ulong | Długi | Ulong | Długi | Ulong |
Jeśli jeden z operandów \
operatora to Liczba dziesiętna, Pojedyncza lub Podwójna, program Visual Basic próbuje przekonwertować go na Wartość Długa przed operacją, a typ danych wynikowych to Long
.
Porównania relacyjne i bitowe
Typ danych wynikowych operacji relacyjnej (, , , , , ) jest zawsze Boolean
typem danych logicznych. >=
<=
>
<
<>
=
To samo dotyczy operacji logicznych (And
, AndAlso
, , Not
Or
, OrElse
, Xor
) w Boolean
operandach.
Typ danych wynikowych operacji logicznej bitowej zależy od typów danych operandów. Należy pamiętać, że AndAlso
element i OrElse
są zdefiniowane tylko dla Boolean
elementów i Visual Basic konwertuje każdy operand zgodnie z potrzebami Boolean
przed wykonaniem operacji.
=, <>, , ><<= i >= Operatory
Jeśli oba operandy to Boolean
, program Visual Basic uważa, że True
jest mniejszy niż False
. Jeśli typ liczbowy jest porównywany z elementem String
, program Visual Basic próbuje przekonwertować String
element na Double
przed operacją. Argument Char
lub Date
operand można porównać tylko z innym operandem tego samego typu danych. Typ danych wynikowych to zawsze Boolean
.
Operator not bitowy
W poniższej tabeli przedstawiono typy danych wynikowych dla operatora bitowego Not
.
Boolean |
SByte |
Byte |
Short |
UShort |
Integer |
UInteger |
Long |
ULong |
|
---|---|---|---|---|---|---|---|---|---|
Not |
Wartość logiczna | SByte | Byte | Krótkie | Ushort | Integer | Uinteger | Długi | Ulong |
Jeśli operand ma Decimal
wartość , , Double
Single
lub String
, Visual Basic próbuje przekonwertować go na Long
przed operacją, a typ danych wynikowych to Long
.
Operatory Bitwise And, Or i Xor
W poniższej tabeli przedstawiono typy danych wynikowych dla operatorów bitowych And
, Or
i Xor
. Należy pamiętać, że ta tabela jest symetryczna; dla danej kombinacji typów danych operandu typ danych wynikowych jest taki sam, niezależnie od kolejności operandów.
Boolean |
SByte |
Byte |
Short |
UShort |
Integer |
UInteger |
Long |
ULong |
|
---|---|---|---|---|---|---|---|---|---|
Boolean |
Wartość logiczna | SByte | Krótkie | Krótkie | Integer | Integer | Długi | Długi | Długi |
SByte |
SByte | SByte | Krótkie | Krótkie | Integer | Integer | Długi | Długi | Długi |
Byte |
Krótkie | Krótkie | Byte | Krótkie | Ushort | Integer | Uinteger | Długi | Ulong |
Short |
Krótkie | Krótkie | Krótkie | Krótkie | Integer | Integer | Długi | Długi | Długi |
UShort |
Integer | Integer | Ushort | Integer | Ushort | Integer | Uinteger | Długi | Ulong |
Integer |
Integer | Integer | Integer | Integer | Integer | Integer | Długi | Długi | Długi |
UInteger |
Długi | Długi | Uinteger | Długi | Uinteger | Długi | Uinteger | Długi | Ulong |
Long |
Długi | Długi | Długi | Długi | Długi | Długi | Długi | Długi | Długi |
ULong |
Długi | Długi | Ulong | Długi | Ulong | Długi | Ulong | Długi | Ulong |
Jeśli operand to Decimal
, , Single
Double
lub String
, Visual Basic próbuje przekonwertować go na Long
przed operacją, a typ danych wynikowych jest taki sam, jak w przypadku, gdy ten operand był Long
już .
Różne operatory
Operator &
jest definiowany tylko dla łączenia String
operandów. Język Visual Basic konwertuje każdy operand zgodnie z potrzebami przed String
operacją, a typ danych wynikowych to zawsze String
. Dla celów &
operatora wszystkie konwersje, które String
mają być traktowane jako rozszerzające, nawet jeśli Option Strict
ma wartość On
.
Operatory Is
i IsNot
wymagają, aby oba operandy był typu odwołania. Wyrażenie TypeOf
...Is
wymaga, aby pierwszy operand był typu odwołania, a drugi operand był nazwą typu danych. We wszystkich tych przypadkach typ danych wynikowych to Boolean
.
Operator Like
jest definiowany tylko dla dopasowywania String
wzorców operandów. Visual Basic próbuje przekonwertować każdy operand zgodnie z potrzebami String
przed operacją. Typ danych wynikowych to zawsze Boolean
.