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

  • SByte, Byte – 256 möjliga integralvärden

  • Kort, UShort – 65 536 (6,5...E+4) möjliga integralvä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 till Short.

  • 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. DoubleSingleDecimal 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 Booleanboolesk datatyp. Detsamma gäller för logiska åtgärder (And, , AndAlsoNot, 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 Booleananser True Visual Basic att det är mindre än False. Om en numerisk typ jämförs med en Stringfö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. DoubleSingleDecimal

Bitvis och, eller, och Xor-operatorer

I följande tabell visas resultatdatatyperna för operatorerna bitvis And, Oroch .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, Doubleeller 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 Booleanresultatdatatypen .

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.

Se även