>> 運算子 (Visual Basic)
更新:2007 年 11 月
執行位元模式的算術右移位。
result = pattern >> amount
參數
result
必要項。整數值。位元模式移位的結果。資料型別與 pattern 型別相同。pattern
必要項。整數值運算式。要移位的位元模式。資料型別必須是整數型別 (SByte、Byte、Short、UShort、Integer、UInteger、Long 或 ULong)。amount
必要項。數值運算式。位元模式移位的位元數。資料型別必須是 Integer 或擴展至 Integer。
備註
算術移位 (Arithmetic Shift) 不是循環型,這表示位元從結果某端移出後,不會從另一端再次進入。在算術右移位中,移位超過最右邊的位元位置的位元會予以捨棄,並且最左邊有正負號的位元會傳至左邊空出的位元位置。這表示若 pattern 有負數值,則空出的位置會設成一,否則會設成零。
請注意,資料型別 Byte、UShort、UInteger 和 ULong 不帶正負號,所以不會傳送正負號位元。若 pattern 屬於不帶正負號的型別,則空出的位置一律會設成零。
為防止位元移位超過結果能接受的程度,Visual Basic 會以符合 pattern 資料型別的大小遮罩 (Mask) 來標記 amount 值。這些值的二進位 AND 是用作位移的量。大小遮罩如下:
pattern 的資料型別。 |
大小遮罩 (十進位) |
大小遮罩 (十六進位) |
---|---|---|
SByte, Byte |
7 |
&H00000007 |
Short, UShort |
15 |
&H0000000F |
Integer, UInteger |
31 |
&H0000001F |
Long, ULong |
63 |
&H0000003F |
如果 amount 是零,則 result 的值等於 pattern 的值。若 amount 是負數,則會視為不帶正負號的值,並會加上適當的大小遮罩。
算術移位不會產生溢位例外狀況。
多載化
>> 運算子可以「多載」,也就是,當運算元具備類別或結構的類型時,該類別或結構就可以重新定義其行為。如果您的程式碼在這種類別或結構上使用此運算子,就一定要先瞭解其重新定義的行為。如需詳細資訊,請參閱運算子程序。
範例
下列範例會使用 >> 運算子,來執行整數值的算術左移位。結果會有與已移位運算式相同的資料型別。
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 (會傳送正負號位元)。