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, ShortUIntegerLongUShortInteger, 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, , IntegerUShortShort, 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ć SBytewartość , , Byte, ShortUShort, Integer, , UInteger, Longlub 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, Integerlub Long)

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, Andi 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 OnVisual 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.

Zobacz też