<< Operator (Visual Basic)
Wykonuje arytmetyczną zmianę lewej 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 lewo bity przesunięte poza zakres typu danych wynikowych są odrzucane, a pozycje bitów opuszczone po prawej stronie są ustawione na zero.
Aby zapobiec przesunięciu o 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.
Uwaga
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 ponowne zdefiniowanie zachowania. Aby uzyskać więcej informacji, zobacz Procedury operatorów.
Przykład
W poniższym przykładzie użyto <<
operatora do wykonywania arytmetycznych przesunięć w lewo na wartości całkowitych. Wynik zawsze ma ten sam typ danych co wyrażenie, które jest przesunięte.
Dim pattern As Short = 192
' The bit pattern is 0000 0000 1100 0000.
Dim result1, result2, result3, result4, result5 As Short
result1 = pattern << 0
result2 = pattern << 4
result3 = pattern << 9
result4 = pattern << 17
result5 = pattern << -1
Wyniki poprzedniego przykładu są następujące:
result1
jest 192 (0000 0000 1100 0000).result2
is 3072 (0000 1100 0000 0000).result3
is -32768 (1000 0000 0000 0000).result4
is 384 (0000 0001 1000 0000).result5
jest 0 (przesunięte 15 miejsc po lewej stronie).
Wartość przesunięcia dla result4
parametru jest obliczana jako 17 I 15, która jest równa 1.