Datatyper för operatorresultat (Visual Basic)
Visual Basic avgör resultatdatatypen för en åtgärd baserat på operandernas datatyper. I vissa fall kan detta vara en datatyp med ett större intervall än för någon av operanderna.
Datatypsintervall
Intervallen för relevanta datatyper, i ordning från minsta till största, är följande:
Booleskt värde – två möjliga värden
Heltal, UInteger – 4 294 967 296 (4,2...E+9) möjliga integralvärden
Long, ULong – 18 446 744 073 709 551 615 (1,8...E+19) möjliga integralvärden
Decimal – 1,5...E+29 möjliga integralvärden, maximalt intervall 7,9...E+28 (absolut värde)
Enskild – maximalt intervall 3,4...E+38 (absolut värde)
Double – maximalt intervall 1,7...E+308 (absolut värde)
Mer information om Visual Basic-datatyper finns i Datatyper.
Om en operand utvärderas till Ingenting behandlar Visual Basic-aritmetiska operatorer den som noll.
Decimal aritmetik
Observera att datatypen Decimal varken är flyttal eller heltal.
Om någon av operanderna i en , , , eller -åtgärd är Decimal
och den andra inte Single
är eller Double
, utvidgar Visual Basic den andra operanden till Decimal
.Mod
/
*
–
+
Den utför åtgärden i Decimal
, och resultatdatatypen är Decimal
.
Flyttals-Aritmetik
Visual Basic utför mest flyttalsaritmetik i Double, vilket är den mest effektiva datatypen för sådana åtgärder. Men om den ena operanden är Single och den andra inte Double
är , utför Visual Basic åtgärden i Single
. Varje operande vidgas efter behov till lämplig datatyp före åtgärden och resultatet har den datatypen.
/ och ^ Operatorer
Operatorn /
definieras endast för datatyperna Decimal, Single och Double . Visual Basic breddar varje operand efter behov till lämplig datatyp före åtgärden, och resultatet har den datatypen.
I följande tabell visas resultatdatatyperna för operatorn /
. Observera att den här tabellen är symmetrisk. För en viss kombination av operanddatatyper är resultatdatatypen densamma oavsett operandernas ordning.
Decimal |
Single |
Double |
Alla heltalstyper | |
---|---|---|---|---|
Decimal |
Decimal | Enstaka | Dubbel | Decimal |
Single |
Ett | Ett | Dubbel | Enstaka |
Double |
Dubbel | Dubbel | Dubbel | Dubbel |
Alla heltalstyper | Decimal | Enstaka | Dubbel | Dubbel |
Operatorn ^
definieras endast för Double
datatypen. Visual Basic breddar varje operand efter behov innan Double
åtgärden och resultatdatatypen är alltid Double
.
Heltals-Aritmetik
Resultatdatatypen för en heltalsåtgärd beror på operandernas datatyper. I allmänhet använder Visual Basic följande principer för att fastställa resultatdatatypen:
Om båda operanderna för en binär operator har samma datatyp har resultatet den datatypen. Ett undantag är
Boolean
, som tvingas tillShort
.Om en osignerad operand deltar med en signerad operand har resultatet en signerad typ med minst lika stort intervall som någon av operanderna.
Annars har resultatet vanligtvis den större av de två operanddatatyperna.
Observera att resultatdatatypen kanske inte är samma som någon av operanddatatyperna.
Kommentar
Resultatdatatypen är inte alltid tillräckligt stor för att innehålla alla möjliga värden som är resultatet av åtgärden. Ett OverflowException undantag kan inträffa om värdet är för stort för resultatdatatypen.
Unary + och – Operatorer
I följande tabell visas resultatdatatyperna för de två unary-operatorerna +
och –
.
Boolean |
SByte |
Byte |
Short |
UShort |
Integer |
UInteger |
Long |
ULong |
|
---|---|---|---|---|---|---|---|---|---|
Unära + |
Kort | SByte | Byte | Kort | UShort | Integer | UInteger | Long | ULong |
Unära – |
Kort | SByte | Kort | Kort | Integer | Integer | Long | Long | Decimal |
<< och >> operatorer
I följande tabell visas resultatdatatyperna för de två bitskiftsoperatorerna <<
och >>
. Visual Basic behandlar varje bitskiftsoperator som en unary-operator på sin vänstra operande (bitmönstret som ska flyttas).
Boolean |
SByte |
Byte |
Short |
UShort |
Integer |
UInteger |
Long |
ULong |
|
---|---|---|---|---|---|---|---|---|---|
<< , >> |
Kort | SByte | Byte | Kort | UShort | Integer | UInteger | Long | ULong |
Om den vänstra operanden är , , , eller String
, försöker Visual Basic konvertera den till Long
före åtgärden och resultatdatatypen är Long
. Double
Single
Decimal
Den högra operanden (antalet bitpositioner som ska flyttas) måste vara Integer
eller en typ som vidgas till Integer
.
Binära +, –, *och modoperatorer
I följande tabell visas resultatdatatyperna för binär- +
och –
operatorerna och operatorerna *
och Mod
. Observera att den här tabellen är symmetrisk. För en viss kombination av operanddatatyper är resultatdatatypen densamma oavsett operandernas ordning.
Boolean |
SByte |
Byte |
Short |
UShort |
Integer |
UInteger |
Long |
ULong |
|
---|---|---|---|---|---|---|---|---|---|
Boolean |
Kort | SByte | Kort | Kort | Integer | Integer | Long | Long | Decimal |
SByte |
SByte | SByte | Kort | Kort | Integer | Integer | Long | Long | Decimal |
Byte |
Kort | Kort | Byte | Kort | UShort | Integer | UInteger | Long | ULong |
Short |
Kort | Kort | Kort | Kort | Integer | Integer | Long | Long | Decimal |
UShort |
Integer | Integer | UShort | Integer | UShort | Integer | UInteger | Long | ULong |
Integer |
Integer | Integer | Integer | Integer | Integer | 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 |
\Operatör
I följande tabell visas resultatdatatyperna för operatorn \
. Observera att den här tabellen är symmetrisk. För en viss kombination av operanddatatyper är resultatdatatypen densamma oavsett operandernas ordning.
Boolean |
SByte |
Byte |
Short |
UShort |
Integer |
UInteger |
Long |
ULong |
|
---|---|---|---|---|---|---|---|---|---|
Boolean |
Kort | SByte | Kort | Kort | Integer | Integer | Long | Long | Long |
SByte |
SByte | SByte | Kort | Kort | Integer | Integer | Long | Long | Long |
Byte |
Kort | Kort | Byte | Kort | UShort | Integer | UInteger | Long | ULong |
Short |
Kort | Kort | Kort | Kort | Integer | Integer | Long | Long | Long |
UShort |
Integer | Integer | UShort | Integer | UShort | Integer | UInteger | Long | ULong |
Integer |
Integer | Integer | Integer | Integer | Integer | 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 |
Om någon av operatorns \
operander är Decimal, Enkel eller Dubbel, försöker Visual Basic konvertera den till Långt före åtgärden och resultatdatatypen är Long
.
Relations- och bitvisjämförelser
Resultatdatatypen för en relationsåtgärd (=
, , <>
<
, >
, <=
, , >=
) är alltid Boolean
boolesk datatyp. Detsamma gäller för logiska åtgärder (And
, , AndAlso
Not
, Or
, OrElse
, Xor
) på Boolean
operander.
Resultatdatatypen för en bitvis logisk åtgärd beror på operandernas datatyper. Observera att AndAlso
och OrElse
endast definieras för Boolean
, och Visual Basic konverterar varje operande efter behov till Boolean
innan åtgärden utförs.
=, <>, <, >, <=, och >= Operatorer
Om båda operanderna är Boolean
anser True
Visual Basic att det är mindre än False
. Om en numerisk typ jämförs med en String
försöker Visual Basic konvertera String
till Double
före åtgärden. En Char
eller Date
operand kan bara jämföras med en annan operand av samma datatyp. Resultatdatatypen är alltid Boolean
.
Bitvis inte operator
I följande tabell visas resultatdatatyperna för bitvisoperatorn Not
.
Boolean |
SByte |
Byte |
Short |
UShort |
Integer |
UInteger |
Long |
ULong |
|
---|---|---|---|---|---|---|---|---|---|
Not |
Booleskt | SByte | Byte | Kort | UShort | Integer | UInteger | Long | ULong |
Om operand är , , , eller String
, försöker Visual Basic konvertera den till Long
före åtgärden och resultatdatatypen är Long
. Double
Single
Decimal
Bitvis och, eller, och Xor-operatorer
I följande tabell visas resultatdatatyperna för operatorerna bitvis And
, Or
och .Xor
Observera att den här tabellen är symmetrisk. För en viss kombination av operanddatatyper är resultatdatatypen densamma oavsett operandernas ordning.
Boolean |
SByte |
Byte |
Short |
UShort |
Integer |
UInteger |
Long |
ULong |
|
---|---|---|---|---|---|---|---|---|---|
Boolean |
Booleskt | SByte | Kort | Kort | Integer | Integer | Long | Long | Long |
SByte |
SByte | SByte | Kort | Kort | Integer | Integer | Long | Long | Long |
Byte |
Kort | Kort | Byte | Kort | UShort | Integer | UInteger | Long | ULong |
Short |
Kort | Kort | Kort | Kort | Integer | Integer | Long | Long | Long |
UShort |
Integer | Integer | UShort | Integer | UShort | Integer | UInteger | Long | ULong |
Integer |
Integer | Integer | Integer | Integer | Integer | 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 |
Om en operand är Decimal
, Single
, Double
eller String
, försöker Visual Basic konvertera den till Long
före åtgärden, och resultatdatatypen är densamma som om den operanden redan hade varit Long
.
Diverse operatorer
Operatorn &
definieras endast för sammanfogning av String
operander. Visual Basic konverterar varje operand efter behov till String
före åtgärden, och resultatdatatypen är alltid String
. För operatorns &
syften anses alla konverteringar till String
vara bredare, även om Option Strict
är On
.
Operatorerna Is
och IsNot
kräver att båda operanderna är av en referenstyp. Uttrycket TypeOf
...Is
kräver att den första operanden är av en referenstyp och att den andra operanden är namnet på en datatyp. I alla dessa fall är Boolean
resultatdatatypen .
Operatorn Like
definieras endast för mönstermatchning av String
operander. Visual Basic försöker konvertera varje operand efter behov till String
före åtgärden. Resultatdatatypen är alltid Boolean
.