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
Negaation také používá – Operator (Visual Basic), ale pouze s jedním operandem, 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 / Operator (Visual Basic) v uvedeném pořadí, 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ělitel rozdělit na dividendu bez zohlednění jakéhokoli zbytku. Dělitel i dělitel 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.
Moduly aritmetika se provádí pomocí modního operátoru. Tento operátor vrátí zbytek po rozdělení dělitele na dividendu celočíselným počtem. Pokud jsou dělitel i dělitel celočíselné typy, je vrácená hodnota integrální. Pokud dělitel a dělitel jsou typy s plovoucí desetinou čárkou, vrátí se také hodnota s plovoucí desetinou čá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
, UShort
Integer
UInteger
Short
, Long
), ULong
rozhraní .NET Framework vyvolá DivideByZeroException výjimku. V operacích dělení na datovém Decimal
typu nebo Single
v rozhraní .NET Framework dojde také k výjimce 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í. Message Například vlastnost obsahuje text zprávy pro výjimku. Další informace naleznete v tématu Vyzkoušet... Chytit... Příkaz Finally.
Operace bitového posunu
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, které se mají posunout. Vzor můžete posunout doprava pomocí operátoru >> nebo doleva pomocí operátoru.<<
Datový typ operandu vzoru musí být , , , , , , UInteger
, Long
nebo ULong
. Integer
UShort
Short
Byte
SByte
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ý posun pravého datového typu bez znaménka (
Byte
,UShort
,UInteger
)ULong
1 pro aritmetický pravý posun záporného čísla (
SByte
,Short
,Integer
, neboLong
)
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ě logických operátorů, Not
Or
And
a Xor
také provádět bitové aritmetické 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.
Typ Sejf ty
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é psaní kódu, 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. Převody typu nebezpečné, na druhé straně způsobují chybu kompilátoru s Option Strict On
. Pokud se například pokusíte přidat proměnnou Integer
do Double
proměnné a přiřadit hodnotu proměnné Integer
, výsledky chyby kompilátoru, protože Double
proměnnou 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ů.