Megosztás a következőn keresztül:


Számtani operátorok a Visual Basicben

Az aritmetikai operátorok számos ismert aritmetikai művelet végrehajtására szolgálnak, amelyek a literálok, változók, egyéb kifejezések, függvény- és tulajdonsághívások és állandók által képviselt numerikus értékek kiszámítását foglalják magukban. Az aritmetikai operátorokkal is osztályozhatók a bit-shift operátorok, amelyek az operandusok egyes bitjeinek szintjén működnek, és a bitmintákat balra vagy jobbra tolják.

Aritmetikai műveletek

Egy kifejezésben két értéket is hozzáadhat a + operátorral együtt, vagy kivonhat egyet egy másikból a - Operátor (Visual Basic) használatával, ahogy az alábbi példa is mutatja.

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

A Negation a - Operátort (Visual Basic) is használja, de csak egy operandussal, ahogy az alábbi példa is mutatja.

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

A szorzás és osztás a * Operátor és /Operátor (Visual Basic) függvényt használja, ahogy az alábbi példa is mutatja.

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

Az exponenciáció a ^ operátort használja, ahogy az alábbi példa is mutatja.

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

Az egész számok osztása a \ Operátor (Visual Basic) használatával történik. Az egész számok osztása a hányadost adja vissza, vagyis azt az egész számot, amely azt jelzi, hogy az osztó hány alkalommal osztható fel az osztalékra a fennmaradó rész figyelembe vétele nélkül. Az osztónak és az osztaléknak is egész típusúnak (SByte, Byte, Short, UShort, Integer, UInteger, Long, és ULong) kell lennie ehhez az operátorhoz. Minden más típust először integrál típussá kell konvertálni. Az alábbi példa az egész szám osztását mutatja be.

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

A Modulus aritmetika a Mod Operátor használatával történik. Ez az operátor a maradékot adja vissza, miután az osztót egész számú osztás után az osztalékba osztották. Ha az osztó és az osztalék is integráltípus, a visszaadott érték integrál. Ha az osztó és az osztalék lebegőpontos típusú, akkor a visszaadott érték is lebegőpontos. Az alábbi példa ezt a viselkedést mutatja be.

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.

Nullával való osztás kísérlete

A nullával való osztás az érintett adattípusoktól függően eltérő eredményt ad. Az integrált osztásokban (SByte, Byte, Short, UShort, Integer, UInteger, Long, ULong) a .NET-keretrendszer kivételt DivideByZeroException jelez. A .NET-keretrendszer Decimal kivételt dob az Single vagy DivideByZeroException adattípuson végzett osztási műveletek során.

Az adattípust tartalmazó Double lebegőpontos osztásokban nem keletkezik kivétel, és az eredmény az osztaléktól függően az osztálytag képviseli a NaN, PositiveInfinity, vagy NegativeInfinity értéket. Az alábbi táblázat összefoglalja a Double érték nullával való osztásának különböző eredményeit.

Osztalék adattípusa Osztó adattípus Osztalékérték Eredmény
Double Double 0 NaN (nem matematikailag meghatározott szám)
Double Double > 0 PositiveInfinity
Double Double < 0 NegativeInfinity

Ha elkap egy DivideByZeroException kivételt, felhasználhatja annak tagjait a kezeléséhez. A tulajdonság például a Message kivétel üzenetszövegét tartalmazza. További információ: Kipróbálás... Elkap... Végül nyilatkozat.

Bit-Shift műveletek

A biteltolásos művelet aritmetikai eltolódást hajt végre egy bitmintán. A minta a bal oldali operandusban található, míg a jobb oldali operandus határozza meg a minta eltolásához szükséges pozíciók számát. A mintát az Operátorral>> jobbra, az Operátorral<< balra mozgathatja.

A mintaoperndus adattípusának a következőnek kell lennie SByte: , Byte, Short, UShort, Integer, UInteger, Longvagy ULong. A shift mennyiség operandus adattípusának Integer kell lennie, vagy kiszélesíthetőnek kell lennie Integer.

Az aritmetikai eltolások nem körkörösek, ami azt jelenti, hogy az eredmény egyik végéről eltolt bitek nem lesznek újra bevezetve a másik végén. A műszak által kiürített bitpozíciók a következőképpen vannak beállítva:

  • 0 aritmetikai bal eltolás esetén

  • Pozitív szám számának aritmetikai jobb eltolása esetén 0

  • Aritmetikai jobb eltolás egy nem aláírt adattípus esetén (0 Byte, UShort, UInteger, ULong)

  • Negatív szám (SByte, Short, Integer, vagy Long) számtani jobb eltolása esetén 1

Az alábbi példa balra és jobbra is eltol egy Integer értéket.

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.

Az aritmetikai műveletek soha nem okoznak túlcsordulási kivételeket.

Bitenkénti műveletek

A logikai operátorok NotOrAndXor mellett bitenkénti számtani műveleteket is végezhet numerikus értékeken. További információért lásd a(z) "Bitműveletek" részt a Visual Basic Logikai és Bitműveleti Operátorai című dokumentumban.

Típusbiztonság

Az operandusoknak általában ugyanazon típusúaknak kell lenniük. Ha például hozzáad egy Integer változót, azt egy másik Integer változóhoz kell hozzáadnia, és az eredményt is hozzá kell rendelnie egy típusú Integer változóhoz.

A helyes típusbiztos kódolási gyakorlat biztosításának egyik módja az Option Strict Utasítás használata. Ha be van állítva Option Strict On, a Visual Basic automatikusan végrehajtja a típusbiztos konverziókat. Ha például változót próbál hozzáadni egy IntegerDouble változóhoz, és egy változóhoz Double rendeli hozzá az értéket, a művelet normálisan folytatódik, mert egy Integer érték adatvesztés nélkül konvertálható.Double A nem biztonságos átalakítások viszont fordítási hibát okoznak a Option Strict On-vel. Például, ha megpróbál egy Integer változót hozzáadni egy Double változóhoz, és az értéket egy Integer változóhoz rendeli, fordítási hiba lép fel, mert egy Double változó nem konvertálható implicit módon Integer típusúvá.

Ha azonban beállítja Option Strict Off, a Visual Basic lehetővé teszi az implicit szűkítési konverziók elvégzését, bár ezek váratlan adatvesztést vagy pontosságot eredményezhetnek. Ezért azt javasoljuk, hogy a produkciós kód írásakor használja Option Strict On. További információkért lásd a konverziók kibővítését és szűkítését ismertető témakört.

Lásd még