Sdílet prostřednictvím


Aritmetické operátory v jazyce Visual Basic

Aritmetické operátory slouží k provádění mnoha známých aritmetických operací, které zahrnují výpočet číselných hodnot reprezentovaných literály, proměnnými, jinými výrazy, voláními funkcí a vlastností a konstantami. Klasifikované pomocí aritmetických operátorů jsou operátory bitového posunu, které fungují na úrovni jednotlivých bitů operandů a posunují jejich bitové vzory doleva nebo doprava.

Aritmetické operace

Ve výrazu můžete sečíst dvě hodnoty společně s operátorem + nebo odečíst jednu od druhé pomocí operátoru - Operator (Visual Basic), jak ukazuje následující příklad.

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

Negace také používá operátor - (Visual Basic), ale zahrnuje pouze jeden operand, jak ukazuje následující příklad.

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

Násobení a dělení používají * Operátor a / Operátor (Visual Basic), jak ukazuje následující příklad.

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

Exponentiation používá ^ Operator, jak ukazuje následující příklad.

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

Celočíselné dělení se provádí pomocí operátoru \ (Visual Basic). Celočíselné dělení vrátí podíl, tj. celé číslo, které představuje počet, kolikrát může dělitel dělit do dividendy, aniž by byl zohledněn jakýkoli zbytek. Dělitel i dělenec musí být celočíselné typy (SByte, Byte, Short, UShort, Integer, UInteger, Long a ULong) pro tento operátor. Všechny ostatní typy musí být nejprve převedeny na celočíselný typ. Následující příklad ukazuje celočíselné dělení.

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

Modulární aritmetika se provádí pomocí modulového operátoru. Tento operátor vrátí zbytek po vydělení dividendy dělitelem tolikrát, kolikrát je to možné celým číslem. Pokud jsou dělitel i dělenec celočíselné typy, je vrácená hodnota celočíselná. Pokud dělitel a dělenec jsou typy s plovoucími čárkami, vrátí se také hodnota s plovoucí čárkou. Následující příklad ukazuje toto chování.

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.

Pokus o dělení podle nuly

Dělení nulou má různé výsledky v závislosti na zahrnutých datových typech. V integrálních děleních (SByte, Byte, Short, UShort, Integer, UInteger, Long, ULong) rozhraní .NET Framework vyvolá DivideByZeroException výjimku. V operacích dělení datového typu Decimal nebo Single v rozhraní .NET Framework je také vyvolána výjimka DivideByZeroException.

V dělení s plovoucí desetinnou čárkou Double zahrnujících datový typ není vyvolán žádná výjimka a výsledkem je člen třídy představující NaN, PositiveInfinitynebo NegativeInfinity, v závislosti na dividendě. Následující tabulka shrnuje různé výsledky pokusu o rozdělení Double hodnoty nulou.

Datový typ dividend Datový typ Dělitele Hodnota dividendy Výsledek
Double Double 0 NaN (ne matematicky definované číslo)
Double Double > 0 PositiveInfinity
Double Double < 0 NegativeInfinity

Když chytíte DivideByZeroException výjimku, můžete její členy použít k jeho zpracování. Vlastnost Message například uchovává text zprávy pro výjimku. Další informace naleznete v tématu Vyzkoušet... Chytit... Příkaz Finally.

Bit-Shift Operace

Operace bitové směny provádí aritmetický posun v bitovém vzoru. Vzor je obsažen v operandu vlevo, zatímco operand na pravé straně určuje počet pozic, o které se má vzor posunout. Vzor můžete posunout doprava pomocí operátoru>> nebo doleva pomocí operátoru<<.

Datový typ operandu vzoru musí být SByte, Byte, Short, UShort, Integer, UInteger, Long nebo ULong. Datový typ operandu posunu musí být Integer nebo musí být rozšířen na Integer.

Aritmetické posuny nejsou kruhové, což znamená, že bity posunuté z jednoho konce výsledku se na druhém konci znovu nevyvolají. Pozice bitů uvolněné posunem jsou nastaveny takto:

  • 0 pro aritmetický levý posun

  • 0 pro aritmetický pravý posun kladného čísla

  • 0 pro aritmetický pravý posun neznaménkového datového typu (Byte, UShort, UInteger, ULong)

  • 1 pro aritmetický pravý posun záporného čísla (SByte, Short, Integer, nebo Long)

Následující příklad posune Integer hodnotu doleva i doprava.

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.

Aritmetické směny nikdy negenerují výjimky přetečení.

Bitové operace

Kromě toho, že jsou logickými operátory, Not, Or, And a Xor také provádějí bitovou aritmetiku při použití s číselnými hodnotami. Další informace naleznete v tématu Bitové operace v logických a bitových operátorech v jazyce Visual Basic.

Bezpečnost typů

Operandy by normálně měly být stejného typu. Pokud například přidáváte proměnnou Integer , měli byste ji přidat do jiné Integer proměnné a výsledek přiřadit také proměnné typu Integer .

Jedním ze způsobů, jak zajistit správné praktiky psaní kódu s typovou bezpečností, je použít příkaz Option Strict. Pokud nastavíte Option Strict On, Visual Basic automaticky provede převody bezpečného typu . Pokud se například pokusíte přidat proměnnou Integer do Double proměnné a přiřadit hodnotu proměnné Double , operace pokračuje normálně, protože Integer hodnotu lze převést na Double bez ztráty dat. Nebezpečné převody typu naproti tomu způsobují chybu kompilátoru s Option Strict On. Pokud se například pokusíte přidat proměnnou Integer k proměnné Double a přiřadit ji proměnné Integer, vznikne chyba kompilátoru, protože proměnnou Double nelze implicitně převést na typ Integer.

Pokud však nastavíte Option Strict Off, Visual Basic umožňuje implicitní zužující převody proběhnout, i když mohou vést k neočekávané ztrátě dat nebo přesnosti. Z tohoto důvodu doporučujeme použít Option Strict On při psaní produkčního kódu. Další informace naleznete v tématu Rozšíření a zužování převodů.

Viz také