Uwaga
Dostęp do tej strony wymaga autoryzacji. Może spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
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ą operatorów * i / (Visual Basic), co pokazuje poniższy przykład.
Dim y As Double
y = 45 * 55.23
y = 32 / 23
Potęgowanie 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
UShort
Integer
UInteger
Long
, 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 dzielnik, jak i dzielna 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
, Short
, UShort
, Integer
, UInteger
, Long
, ULong
) program .NET Framework zgłasza DivideByZeroException wyjątek. W operacjach dzielenia na typ danych Decimal
lub Single
, program .NET Framework również zgłasza wyjątek DivideByZeroException.
W podziałach zmiennoprzecinkowych obejmujących typ danych Double
nie jest zgłaszany żaden wyjątek, a wynikiem jest składowa klasy reprezentująca NaN, PositiveInfinity lub NegativeInfinity, w zależności od dzielnika. W poniższej tabeli podsumowano różne wyniki próby podzielenia Double
wartości o zero.
Typ danych dywidendy | Typ danych dzielnika | Wartość dywidendy | Wynik |
---|---|---|---|
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ć jego obsługę. Na przykład Message właściwość przechowuje tekst komunikatu dla wyjątku. Aby uzyskać więcej informacji, zobacz Instrukcja Try...Catch...Finally.
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 na prawo operatorem >> lub na lewo operatorem <<.
Typ danych operandu wzorca musi być typu SByte
, 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 zwolnione przez przesunięcie są ustawione w sposób następujący:
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 przesuwa wartość Integer
na lewo i na 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 bycia operatorami logicznymi, Not
, Or
, And
i Xor
również wykonują bitowe operacje arytmetyczne w przypadku użycia na wartościach liczbowych. Aby uzyskać więcej informacji, zobacz "Operacje bitowe" w operatorach logicznych i bitowych w Visual Basic.
Bezpieczeństwo typów
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. Jeśli skonfigurujesz 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, który występuje przy Option Strict On
. Jeśli na przykład spróbujesz dodać zmienną Integer
do zmiennej Double
i przypisać wartość do zmiennej Integer
, powstaje błąd 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 korzystać z Option Strict On
podczas pisania kodu produkcyjnego. Aby uzyskać więcej informacji, zobacz Rozszerzanie i zawężanie konwersji.