>> 运算符 (Visual Basic)

对位模式执行算术右移位运算。

语法

result = pattern >> amount  

组成部分

result
必需。 整型数值。 对该位模式进行移位的结果。 数据类型与 pattern 的数据类型相同。

pattern
必需。 整型数值表达式。 要进行移位的位模式。 数据类型必须为整型(SByteByteShortUShortIntegerUIntegerLongULong)。

amount
必需。 数值表达式。 要将该位模式移位的位数。 数据类型必须为 Integer 或扩展到 Integer

注解

算术移位不是循环性的,也就是说,从结果一端移出的位不会重新移入到另一端。 在算术右移中,丢弃移出最右侧位位置的位,最左侧的位(符号)补齐左侧空出的位位置。 这意味着如果 pattern 为负值,则空出的位置设为 1;否则设为 0。

请注意,数据类型 ByteUShortUIntegerULong 是无符号的,因此没有要补齐的符号位。 如果 pattern 是任一无符号类型,则空出的位置始终设为 0。

为防止移位量超出结果可以容纳的量,Visual Basic 使用与 pattern 数据类型相对应的大小掩码来对 amount 的值进行掩码。 这些值的二进制 AND 用于计算移位量。 大小掩码如下所示:

数据类型 pattern 大小掩码(十进制) 大小掩码(十六进制)
SByteByte 7 &H00000007
ShortUShort 15 &H0000000F
IntegerUInteger 31 &H0000001F
LongULong 63 &H0000003F

如果 amount 为 0,则 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(补齐符号位)。

另请参阅