Operatory arytmetyczne w Visual Basic
Operatory arytmetyczne służą do wykonywania wielu znanych operacji arytmetycznych obejmujących obliczanie wartości liczbowych reprezentowanych przez literały, zmienne, inne wyrażenia, wywołania funkcji i właściwości oraz stałe. Również sklasyfikowane z operatorami arytmetycznymi są operatory przesunięcia bitowego, które działają na poziomie poszczególnych bitów operandów i przesuwają swoje wzorce bitowe do lewej lub prawej.
Operacje arytmetyczne
Możesz dodać dwie wartości w wyrażeniu razem z operatorem + lub odjąć jedną z nich za pomocą operatora - (Visual Basic), jak pokazano w poniższym przykładzie.
Dim x As Integer
x = 67 + 34
x = 32 - 12
Negacja używa również operatora — (Visual Basic), ale z tylko jednym operandem, jak pokazano w poniższym przykładzie.
Dim x As Integer = 65
Dim y As Integer
y = -x
Mnożenie i dzielenie używają odpowiednio operatorów * i / operatorów (Visual Basic), jak pokazano w poniższym przykładzie.
Dim y As Double
y = 45 * 55.23
y = 32 / 23
Wykładnik używa operatora ^, jak pokazano w poniższym przykładzie.
Dim z As Double
z = 23 ^ 3
' The preceding statement sets z to 12167 (the cube of 23).
Dzielenie liczb całkowitych odbywa się przy użyciu operatora \ (Visual Basic). Dzielenie liczb całkowitych zwraca iloraz, czyli liczbę całkowitą reprezentującą liczbę razy dzielenia dzielnika na dywidendę bez rozważenia jakiejkolwiek pozostałej części. Zarówno dzielnikiem, jak i dywidendą muszą być typy całkowite (SByte
, Byte
, Short
UInteger
Long
UShort
Integer
, i ULong
) dla tego operatora. Wszystkie inne typy należy najpierw przekonwertować na typ całkowity. W poniższym przykładzie pokazano podział liczb całkowitych.
Dim k As Integer
k = 23 \ 5
' The preceding statement sets k to 4.
Arytmetyka modulusa jest wykonywana przy użyciu operatora mod. Ten operator zwraca resztę po podzieleniu dzielnika na dywidendę całkowitą liczbę razy. Jeśli zarówno dzielnica, jak i dywidenda są typami całkowitymi, zwracana wartość jest całkowita. Jeśli dzielniki i dywidendy są typami zmiennoprzecinkowych, zwracana wartość jest również zmiennoprzecinkowa. W poniższym przykładzie pokazano to zachowanie.
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.
Podjęto próbę dzielenia według zera
Podział według zera ma różne wyniki w zależności od zaangażowanych typów danych. W podziałach całkowitych (SByte
, Byte
, , Integer
UShort
Short
, UInteger
, , Long
, ULong
), program .NET Framework zgłasza DivideByZeroException wyjątek. W operacjach dzielenia Decimal
na typ danych lub Single
program .NET Framework zgłasza DivideByZeroException również wyjątek.
W podziałach zmiennoprzecinkowych obejmujących Double
typ danych nie jest zgłaszany żaden wyjątek, a wynikiem jest składowa klasy reprezentująca NaNelement , PositiveInfinitylub NegativeInfinity, w zależności od dywidendy. W poniższej tabeli podsumowano różne wyniki próby podzielenia Double
wartości o zero.
Typ danych dywidendy | Typ danych dzielnika | Wartość dywidendy | Result |
---|---|---|---|
Double |
Double |
0 | NaN (nie jest to liczba zdefiniowana matematycznie) |
Double |
Double |
> 0 | PositiveInfinity |
Double |
Double |
< 0 | NegativeInfinity |
Po przechwyceniu wyjątku DivideByZeroException możesz użyć jego członków, aby ułatwić jej obsługę. Na przykład Message właściwość przechowuje tekst komunikatu dla wyjątku. Aby uzyskać więcej informacji, zobacz Try... Złapać... Finally, instrukcja.
Operacje Bit-Shift
Operacja bitowego przesunięcia wykonuje zmianę arytmetyczną na wzorcu bitowym. Wzorzec znajduje się w operandze po lewej stronie, a operand po prawej stronie określa liczbę pozycji, które mają przesuwać wzorzec. Możesz przesunąć wzorzec z prawej strony operatorem >> lub z lewej strony operatorem<<.
Typ danych operandu wzorca musi mieć SByte
wartość , , Byte
, Short
UShort
, Integer
, , UInteger
, Long
lub ULong
. Typ danych operacji przesunięcia musi być Integer
lub musi być rozszerzony na Integer
.
Przesunięcia arytmetyczne nie są cykliczne, co oznacza, że bity przesunięte z jednego końca wyniku nie są przywracane na drugim końcu. Pozycje bitów opuszczone przez przesunięcie są ustawione w następujący sposób:
0 dla arytmetycznego przesunięcia w lewo
0 dla arytmetycznego przesunięcia w prawo liczby dodatniej
0 dla arytmetycznego przesunięcia w prawo niepodpisanego typu danych (
Byte
,UShort
,UInteger
, )ULong
1 dla arytmetycznego przesunięcia w prawo liczby ujemnej (
SByte
,Short
,Integer
lubLong
)
Poniższy przykład przenosi Integer
wartość zarówno w lewo, jak i w prawo.
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.
Zmiany arytmetyczne nigdy nie generują wyjątków przepełnienia.
Operacje bitowe
Oprócz operatorów logicznych, Not
, Or
, And
i Xor
również wykonywać arytmetyczne bitowe w przypadku użycia na wartościach liczbowych. Aby uzyskać więcej informacji, zobacz "Operacje bitowe" w operatorach logicznych i bitowych w Visual Basic.
Wpisz Sejf ty
Operandy powinny zwykle być tego samego typu. Jeśli na przykład dodajesz zmienną Integer
, należy dodać ją do innej Integer
zmiennej i przypisać wynik do zmiennej typu Integer
.
Jednym ze sposobów zapewnienia dobrej praktyki kodowania bezpiecznego dla typu jest użycie instrukcji Option Strict. W przypadku ustawienia program Option Strict On
Visual Basic automatycznie wykonuje konwersje bezpieczne dla typów. Jeśli na przykład spróbujesz dodać zmienną Integer
do Double
zmiennej i przypisać wartość do Double
zmiennej, operacja będzie kontynuowana normalnie, ponieważ Integer
wartość można przekonwertować na Double
bez utraty danych. Z drugiej strony niebezpieczne konwersje typu powodują błąd kompilatora za pomocą polecenia Option Strict On
. Jeśli na przykład spróbujesz dodać zmienną Integer
do Double
zmiennej i przypisać wartość do Integer
zmiennej, wynik błędu kompilatora, ponieważ zmienna Double
nie może zostać niejawnie przekonwertowana na typ Integer
.
Jeśli jednak ustawisz opcję Option Strict Off
, program Visual Basic zezwala na niejawne konwersje zawężające, chociaż mogą one spowodować nieoczekiwaną utratę danych lub precyzji. Z tego powodu zalecamy użycie go Option Strict On
podczas pisania kodu produkcyjnego. Aby uzyskać więcej informacji, zobacz Rozszerzanie i zawężanie konwersji.