>> Operator (Visual Basic)
Wykonuje arytmetyczną zmianę prawą na wzorcu bitowym.
Składnia
result = pattern >> amount
generatora
result
Wymagany. Wartość liczbowa całkowita. Wynik przesunięcia wzorca bitowego. Typ danych jest taki sam jak typ pattern
.
pattern
Wymagany. Wyrażenie liczbowe całkowite. Wzorzec bitowy, który ma zostać przesunięty. Typ danych musi być typem całkowitym (SByte
, Byte
, , UShort
Short
, Integer
, UInteger
, lub Long
ULong
).
amount
Wymagany. Wyrażenie liczbowe. Liczba bitów do przesunięcia wzorca bitów. Typ danych musi być Integer
lub poszerzyć wartość .Integer
Uwagi
Przesunięcia arytmetyczne nie są cykliczne, co oznacza, że bity przesunięte z jednego końca wyniku nie są przywracane na drugim końcu. W arytmetycznym przesunięciu w prawo bity przesunięte poza położenie bitów po prawej stronie są odrzucane, a bit z lewej strony (znak) jest propagowany do pozycji bitów opuszczonych po lewej stronie. Oznacza to, że jeśli pattern
ma wartość ujemną, wolne pozycje są ustawione na jedną; w przeciwnym razie są ustawione na zero.
Należy pamiętać, że typy Byte
danych , , UShort
UInteger
i ULong
są niepodpisane, więc nie ma bitu znaku do propagacji. Jeśli pattern
ma jakikolwiek typ niepodpisany, wolne pozycje są zawsze ustawione na zero.
Aby zapobiec przesunięciu przez więcej bitów niż wynik może być przechowywany, program Visual Basic maskuje wartość amount
z maską rozmiaru odpowiadającą typowi pattern
danych . Dane binarne AND z tych wartości są używane dla wartości przesunięcia. Maski rozmiaru są następujące:
Typ danych pattern |
Maska rozmiaru (dziesiętna) | Maska rozmiaru (szesnastkowa) |
---|---|---|
SByte , Byte |
7 | &H00000007 |
Short , UShort |
15 | &H0000000F |
Integer , UInteger |
31 | &H0000001F |
Long , ULong |
63 | &H0000003F |
Jeśli amount
wartość jest równa zero, wartość result
jest identyczna z wartością pattern
. Jeśli amount
jest ujemna, jest traktowana jako niepodpisane wartość i maskowana przy użyciu odpowiedniej maski rozmiaru.
Zmiany arytmetyczne nigdy nie generują wyjątków przepełnienia.
Przeciążenie
Operator >>
może być przeciążony, co oznacza, że klasa lub struktura może ponownie zdefiniować jego zachowanie, gdy operand ma typ tej klasy lub struktury. Jeśli kod używa tego operatora w takiej klasie lub strukturze, upewnij się, że rozumiesz jego ponownie zdefiniowane zachowanie. Aby uzyskać więcej informacji, zobacz Procedury operatorów.
Przykład
W poniższym przykładzie >>
operator używa operatora do wykonywania arytmetycznych przesunięć w prawo na wartości całkowitych. Wynik zawsze ma ten sam typ danych co wyrażenie, które jest przesunięte.
Dim pattern As Short = 2560
' The bit pattern is 0000 1010 0000 0000.
Dim result1, result2, result3, result4, result5 As Short
result1 = pattern >> 0
result2 = pattern >> 4
result3 = pattern >> 10
result4 = pattern >> 18
result5 = pattern >> -1
Wyniki powyższego przykładu są następujące:
result1
is 2560 (0000 1010 0000 0000).result2
is 160 (0000 0000 1010 0000).result3
ma wartość 2 (0000 0000 0000 0010).result4
jest 640 (0000 0010 1000 0000).result5
jest 0 (przesunięte 15 miejsc po prawej stronie).
Wartość przesunięcia dla result4
parametru jest obliczana jako 18 I 15, która jest równa 2.
W poniższym przykładzie pokazano przesunięcia arytmetyczne dla wartości ujemnej.
Dim negPattern As Short = -8192
' The bit pattern is 1110 0000 0000 0000.
Dim negResult1, negResult2 As Short
negResult1 = negPattern >> 4
negResult2 = negPattern >> 13
Wyniki powyższego przykładu są następujące:
negresult1
is -512 (1111 1110 0000 0000).negresult2
is -1 (bit znaku jest propagowany).