>> 運算子 (Visual Basic)

在位元模式上執行算術右移位。

語法

result = pattern >> amount  

組件

result
必要。 整數數值。 移位位元模式的結果。 資料類型與 pattern 的資料類型相同。

pattern
必要。 整數數值運算式。 要移位的位元模式。 資料類型必須是整數型別 (SByteByteShortUShortIntegerUIntegerLongULong)。

amount
必要。 數值運算式。 要移位位元模式的位元數。 資料類型必須 Integer 或擴大為 Integer

備註

算術移位不是循環移位,這表示從結果的一端移出的位元不會在另一端重新引入。 在算術右移位中,會捨棄超出最右邊位元位置的位元,而最左邊的 (符號) 位元會傳播到左邊空出的位元位置。 這表示如果 pattern 有負值,則空缺的位置會設為一;否則會設為零。

請注意,資料類型 ByteUShortUIntegerULong 都是不帶正負號,因此沒有要傳播的正負號位元。 如果 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 (正負號位元已傳播)。

另請參閱