>> 運算子 (Visual Basic)
在位元模式上執行算術右移位。
語法
result = pattern >> amount
組件
result
必要。 整數數值。 移位位元模式的結果。 資料類型與 pattern
的資料類型相同。
pattern
必要。 整數數值運算式。 要移位的位元模式。 資料類型必須是整數型別 (SByte
、Byte
、Short
、UShort
、Integer
、UInteger
、Long
或 ULong
)。
amount
必要。 數值運算式。 要移位位元模式的位元數。 資料類型必須 Integer
或擴大為 Integer
。
備註
算術移位不是循環移位,這表示從結果的一端移出的位元不會在另一端重新引入。 在算術右移位中,會捨棄超出最右邊位元位置的位元,而最左邊的 (符號) 位元會傳播到左邊空出的位元位置。 這表示如果 pattern
有負值,則空缺的位置會設為一;否則會設為零。
請注意,資料類型 Byte
、 UShort
、UInteger
和 ULong
都是不帶正負號,因此沒有要傳播的正負號位元。 如果 pattern
屬於任何不帶正負號的類型,則空置的位置一律會設為零。
為了防止移位超過結果所能保留的位元,Visual Basic 會使用對應至 pattern
資料類型的大小遮罩來遮罩 amount
的值。 這些值的二進位 AND 會用於移位量。 大小遮罩如下所示:
pattern 的資料類型 |
大小遮罩 (十進位) | 大小遮罩 (十六進位) |
---|---|---|
SByte , Byte |
7 | &H00000007 |
Short , UShort |
15 | &H0000000F |
Integer , UInteger |
31 | &H0000001F |
Long , ULong |
63 | &H0000003F |
如果 amount
為零,則 result
的值會與 pattern
的值相同。 如果 amount
為負數,則會將其視為未帶正負號的值,並以適當的大小遮罩進行遮罩處理。
算術移位永遠不會產生溢位例外狀況。
多載化
>>
運算子可以「多載」,這表示當運算元具有該類別或結構的型別時,類別或結構可以重新定義其行為。 如果您的程式碼在此類類別或結構上使用此運算子,請務必了解其重新定義的行為。 如需詳細資訊,請參閱 Operator Procedures。
範例
下列範例會使用 >>
運算子,對整數值執行算術右移位。 結果一律具有與所移位之運算式相同的資料類型。
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
上述範例的結果如下所示:
result1
為 2560 (0000 1010 0000 0000)。result2
為 160 (0000 0000 1010 0000)。result3
為 2 (0000 0000 0000 0010)。result4
為 640 (0000 0010 1000 0000)。result5
為 0 (向右移位 15 位數)。
result4
的移位量是 18 AND 15,等於 2。
下列範例顯示負值上的算術移位。
Dim negPattern As Short = -8192
' The bit pattern is 1110 0000 0000 0000.
Dim negResult1, negResult2 As Short
negResult1 = negPattern >> 4
negResult2 = negPattern >> 13
上述範例的結果如下所示:
negresult1
為 -512 (1111 1110 0000 0000)。negresult2
為 -1 (正負號位元已傳播)。