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
, , Byte
Short
, UShort
, Integer
, UInteger
, Long
och 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
, , Short
Byte
, UShort
, Integer
, UInteger
, Long
, ) ULong
genererar .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
, Long
eller ULong
. Integer
UShort
Short
Byte
SByte
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
, ,UInteger
UShort
,ULong
)1 för en aritmetisk högerförskjutning av ett negativt tal (
SByte
, ,Integer
Short
ellerLong
)
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
, And
och 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 On
utfö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 Off
tillå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).