Dela via


Aritmetiska operatorer i Visual Basic

Aritmetiska operatorer används för att utföra många av de välbekanta aritmetiska åtgärder som omfattar beräkning av numeriska värden som representeras av literaler, variabler, andra uttryck, funktions- och egenskapsanrop och konstanter. Också klassificeras med aritmetiska operatorer är bit-shift operatorer, som agerar på nivån för enskilda bitar av operander och flytta sina bitmönster till vänster eller höger.

Aritmetiska åtgärder

Du kan lägga till två värden i ett uttryck tillsammans med + operatorn eller subtrahera ett från ett annat med operatorn - (Visual Basic), vilket visas i följande exempel.

Dim x As Integer
x = 67 + 34
x = 32 - 12

Negation använder också - Operator (Visual Basic), men med endast en operande, vilket visas i följande exempel.

Dim x As Integer = 65
Dim y As Integer
y = -x

Multiplikation och division använder * Operator respektive /Operator (Visual Basic), vilket visas i följande exempel.

Dim y As Double
y = 45 * 55.23
y = 32 / 23

Exponentiation använder ^-operatorn, vilket visas i följande exempel.

Dim z As Double
z = 23 ^ 3
' The preceding statement sets z to 12167 (the cube of 23).

Heltalsdivisionen utförs med hjälp av \ Operator (Visual Basic). Heltalsdivisionen returnerar kvoten, det vill: det heltal som representerar antalet gånger som divisorn kan dela upp sig i utdelningen utan hänsyn till någon rest. Både divisorn och utdelningen måste vara integraltyper (SByte, , ByteShort, UShort, Integer, UInteger, Longoch ULong) för den här operatorn. Alla andra typer måste konverteras till en integrerad typ först. I följande exempel visas heltalsdelning.

Dim k As Integer
k = 23 \ 5
' The preceding statement sets k to 4.

Modulus-aritmetik utförs med modoperatorn. Den här operatorn returnerar resten efter att ha delat upp divisorn i utdelningen ett heltal antal gånger. Om både divisor och utdelning är integraltyper är det returnerade värdet en integrerad del. Om divisor och utdelning är flyttalstyper är det returnerade värdet också flyttal. I följande exempel visas det här beteendet.

Dim x As Integer = 100
Dim y As Integer = 6
Dim z As Integer
z = x Mod y
' The preceding statement sets z to 4.
Dim a As Double = 100.3
Dim b As Double = 4.13
Dim c As Double
c = a Mod b
' The preceding statement sets c to 1.18.

Försök till division efter noll

Division efter noll har olika resultat beroende på vilka datatyper som ingår. I integral-divisioner (SByte, , ShortByte, UShort, Integer, UInteger, Long, ) ULonggenererar .NET Framework ett DivideByZeroException undantag. I divisionsåtgärder för Decimal datatypen eller Single genererar .NET Framework också ett DivideByZeroException undantag.

I flyttalsdelningar som involverar Double datatypen genereras inget undantag och resultatet är klassmedlemmen som representerar NaN, PositiveInfinityeller NegativeInfinity, beroende på utdelningen. I följande tabell sammanfattas de olika resultaten av försök att dividera ett Double värde med noll.

Typ av utdelningsdata Divisor-datatyp Utdelningsvärde Resultat
Double Double 0 NaN (inte ett matematiskt definierat tal)
Double Double > 0 PositiveInfinity
Double Double < 0 NegativeInfinity

När du får ett DivideByZeroException undantag kan du använda dess medlemmar för att hantera det. Egenskapen innehåller till exempel Message meddelandetexten för undantaget. Mer information finns i Prova... Fånga... Slutligen -instruktion.

Bit-Shift-åtgärder

En bit-shift-åtgärd utför ett aritmetiskt skift på ett bitmönster. Mönstret finns i operanden till vänster, medan operanden till höger anger antalet positioner för att ändra mönstret. Du kan flytta mönstret till höger med operatorn >> eller till vänster med operatorn.<<

Datatypen för mönsteroperänden måste vara , , , , , , UInteger, Longeller ULong. IntegerUShortShortByteSByte Datatypen för skiftmängdens operand måste vara Integer eller måste utvidgas till Integer.

Aritmetiska skift är inte cirkulära, vilket innebär att de bitar som flyttas från ena änden av resultatet inte återinförs i den andra änden. Bitpositionerna som töms av ett skift anges på följande sätt:

  • 0 för ett aritmetiskt vänsterskift

  • 0 för en aritmetik högerförskjutning av ett positivt tal

  • 0 för ett aritmetiskt högerskifte av en osignerad datatyp (Byte, , UIntegerUShort, ULong)

  • 1 för en aritmetisk högerförskjutning av ett negativt tal (SByte, , IntegerShorteller Long)

I följande exempel flyttas ett Integer värde både till vänster och höger.

Dim lResult, rResult As Integer
Dim pattern As Integer = 12
' The low-order bits of pattern are 0000 1100.
lResult = pattern << 3
' A left shift of 3 bits produces a value of 96.
rResult = pattern >> 2
' A right shift of 2 bits produces value of 3.

Aritmetiska skift genererar aldrig undantag för spill.

Bitvis åtgärder

Förutom att vara logiska operatorer, Not, Or, Andoch Xor även utföra bitvis aritmetik när de används på numeriska värden. Mer information finns i "Bitwise Operations" i Logiska operatorer och bitvis-operatorer i Visual Basic.

Skriv Valv ty

Operander bör normalt vara av samma typ. Om du till exempel gör tillägg med en variabel bör du lägga till den i en Integer annan Integer variabel, och du bör även tilldela resultatet till en variabel av typen Integer .

Ett sätt att säkerställa god typsäker kodningspraxis är att använda alternativet Strikt-instruktion. Om du anger Option Strict Onutför Visual Basic automatiskt typsäkra konverteringar. Om du till exempel försöker lägga till en Integer variabel i en Double variabel och tilldela värdet till en Double variabel fortsätter åtgärden normalt eftersom ett Integer värde kan konverteras till Double utan dataförlust. Typsäkra konverteringar orsakar å andra sidan ett kompilatorfel med Option Strict On. Om du till exempel försöker lägga till en Integer variabel i en Double variabel och tilldela värdet till en Integer variabel resulterar ett kompilatorfel, eftersom en Double variabel inte implicit kan konverteras till typen Integer.

Om du anger Option Strict Offtillåter Visual Basic dock implicita begränsade konverteringar, även om de kan leda till oväntad dataförlust eller precision. Därför rekommenderar vi att du använder Option Strict On när du skriver produktionskod. Mer information finns i Widening and Narrowing Conversions (Bredda och begränsa konverteringar).

Se även