>> 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, , UShortShort, Integer, UInteger, lub LongULong).

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 Bytedanych , , UShortUIntegeri 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 patterndanych . 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).

Zobacz też