Dela via


>> Operator (Visual Basic)

Utför ett aritmetiskt högerskift på ett bitmönster.

Syntax

result = pattern >> amount  

Delar

result
Obligatoriska. Integral numeriskt värde. Resultatet av att flytta bitmönstret. Datatypen är samma som patternför .

pattern
Obligatoriska. Integral numeriskt uttryck. Bitmönstret som ska flyttas. Datatypen måste vara en integrerad typ (SByte, Byte, Short, UShort, Integer, UInteger, Longeller ULong).

amount
Obligatoriska. Numeriskt uttryck. Antalet bitar för att ändra bitmönstret. Datatypen måste vara Integer eller utvidgas till Integer.

Kommentarer

Aritmetiska skift är inte cirkulära, vilket innebär att de bitar som flyttas från ena änden av resultatet inte återinförs i den andra änden. I ett aritmetiskt högerskift ignoreras de bitar som flyttas bortom den högra bitpositionen och den vänstra biten (teckenbiten) sprids till bitpositionerna som töms till vänster. Det innebär att om pattern det har ett negativt värde är de utrymda positionerna inställda på ett, annars är de inställda på noll.

Observera att datatyperna Byte, UShort, UIntegeroch ULong är osignerade, så det finns ingen teckenbit att sprida. Om pattern är av någon osignerad typ är de lediga positionerna alltid inställda på noll.

För att förhindra att fler bitar flyttas än vad resultatet kan innehålla maskerar Visual Basic värdet amount för med en storleksmask som motsvarar datatypen pattern. Binärt OCH för dessa värden används för skiftmängden. Storleksmaskerna är följande:

Datatyp för pattern Storleksmask (decimal) Storleksmask (hexadecimal)
SByte, Byte 7 &H00000007
Short, UShort 15 &H0000000F
Integer, UInteger 31 &H0000001F
Long, ULong 63 &H0000003F

Om amount är noll är värdet för result identiskt med värdet patternför . Om amount är negativt tas det som ett osignerat värde och maskeras med lämplig storleksmask.

Aritmetiska skift genererar aldrig undantag för spill.

Överbelastning

Operatorn >> kan överbelastas, vilket innebär att en klass eller struktur kan omdefiniera sitt beteende när en operande har den typen av klass eller struktur. Om din kod använder den här operatorn i en sådan klass eller struktur bör du se till att du förstår dess omdefinierade beteende. Mer information finns i Operatorprocedurer.

Exempel

I följande exempel används operatorn >> för att utföra aritmetiska högerförskjutningar på integralvärden. Resultatet har alltid samma datatyp som för uttrycket som flyttas.

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

Resultatet av föregående exempel är följande:

  • result1 är 2560 (0000 1010 0000 0000).

  • result2 är 160 (0000 0000 1010 0000).

  • result3 är 2 (0000 0000 0000 0010).

  • result4 är 640 (0000 0010 1000 0000).

  • result5 är 0 (skiftade 15 platser till höger).

Skiftbeloppet för result4 beräknas som 18 AND 15, vilket är lika med 2.

I följande exempel visas aritmetiska förändringar på ett negativt värde.

Dim negPattern As Short = -8192
' The bit pattern is 1110 0000 0000 0000.
Dim negResult1, negResult2 As Short
negResult1 = negPattern >> 4
negResult2 = negPattern >> 13

Resultatet av föregående exempel är följande:

  • negresult1 är -512 (1111 1110 0000 0000).

  • negresult2 är -1 (teckenbiten sprids).

Se även