>> operátor (Visual Basic)
Provádí aritmetický posun doprava na bitový vzor.
Syntax
result = pattern >> amount
Součásti
result
Povinná hodnota. Celočíselné hodnoty. Výsledek posunu bitového vzoru. Datový typ je stejný jako u pattern .
pattern
Povinná hodnota. Integrální číselný výraz. Bitový vzor, který se má přesunout. Datový typ musí být celočíselného typu ( SByte , , , , , , , nebo Byte Short UShort Integer UInteger Long ULong ).
amount
Povinná hodnota. Číselný výraz. Počet bitů, které se posunou bitovým vzorem. Datový typ musí být Integer nebo rozšířit na Integer .
Poznámky
Aritmetické posuny nejsou kruhové, což znamená, že bity posunuté mimo jeden konec výsledku nejsou znovu zavedeny na druhém konci. Při aritmetickém posunu doprava se bity posunuté za bitovou pozici nejvíce vpravo zahodí a bit nejvíce vlevo (znaménko) se rozšíří do bitových pozic uvolněných vlevo. To znamená, že pokud má zápornou hodnotu, uvolněné pozice jsou nastaveny na jednu; v opačném případě jsou pattern nastaveny na nulu.
Všimněte si, že datové typy , , a jsou nepodepsané, takže není Byte UShort možné rozšířit bit UInteger ULong znaménka. Pokud pattern má libovolný typ bez znaménka, uvolněné pozice jsou vždy nastaveny na nulu.
Aby se zabránilo posunu o více bitů, než Visual Basic výsledek, zamaskuje hodnotu maskou velikosti odpovídající datovému amount typu pattern . Binární AND těchto hodnot se používá pro velikost posunu. Masky velikosti jsou následující:
Datový typ pattern |
Maska velikosti (desítková) | Maska velikosti (hexadecimální) |
|---|---|---|
SByte, Byte |
7 | &H00000007 |
Short, UShort |
15 | &H0000000F |
Integer, UInteger |
31 | &H0000001F |
Long, ULong |
63 | &H0000003F |
Pokud amount je nula, hodnota result je stejná jako hodnota pattern . Pokud amount je záporná, používá se jako hodnota bez znaménka a maskuje se příslušnou maskou velikosti.
Aritmetické posuny nikdy negenerují výjimky přetečení.
Přetížení
Operátor >> může být přetížen, což znamená, že třída nebo struktura může předefinovat své chování, pokud má operand typ této třídy nebo struktury. Pokud váš kód používá tento operátor u takové třídy nebo struktury, ujistěte se, že rozumíte jejímu předdefinované chování. Další informace najdete v tématu Procedury operátora.
Příklad
Následující příklad používá operátor >> k provádění aritmetických posunů vpravo u integrálních hodnot. Výsledek má vždy stejný datový typ jako u posunutých výrazů.
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
Výsledky předchozího příkladu jsou následující:
result1je 2560 (0000 1010 0000 0000).result2je 160 (0000 0000 1010 0000).result3je 2 (0000 0000 0000 0010).result4je 640 (0000 0010 1000 0000).result5je 0 (posunuto 15 míst doprava).
Částka posunu pro result4 se vypočítá jako 18 A 15, což se rovná 2.
Následující příklad ukazuje aritmetické posuny u záporné hodnoty.
Dim negPattern As Short = -8192
' The bit pattern is 1110 0000 0000 0000.
Dim negResult1, negResult2 As Short
negResult1 = negPattern >> 4
negResult2 = negPattern >> 13
Výsledky předchozího příkladu jsou následující:
negresult1je -512 (1111 1110 0000 0000).negresult2je -1 (bit znaménka se rozšíří).