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

  • SByte, Bajt — 256 możliwych wartości całkowitych

  • 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 do Short.

  • 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, , DoubleSinglelub 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 Booleantypem danych logicznych. >=<=><<>= To samo dotyczy operacji logicznych (And, AndAlso, , NotOr, 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 Booleanelementó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 Decimalwartość , , DoubleSinglelub 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, Ori 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, , SingleDoublelub 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ł Longjuż .

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.

Zobacz też