对位模式执行算术右移。
语法
result = pattern >> amount
部件
result
必填。 整型数值。 移动位模式的结果。 数据类型与该 pattern数据类型相同。
pattern
必填。 整型数值表达式。 要移动的位模式。 数据类型必须是整型类型(SByte、、Byte、Short、UShort、Integer、UInteger、或LongULong)。
amount
必填。 数值表达式。 要移动位模式的位数。 数据类型必须 Integer 或扩大为 Integer。
注解
算术移位不是循环性的,也就是说,从结果一端移出的位不会重新移入到另一端。 在算术右移中,将丢弃超出最右侧位位置的位,最左侧(符号)位将传播到左侧空置的位位置。 这意味着如果 pattern 具有负值,则空置的位置设置为一个;否则它们设置为零。
请注意,数据类型Byte、UShortUInteger数据类型和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 为负值,则将其视为无符号值,并用适当的大小掩码屏蔽。
算术移位永远不会生成溢出异常。
重载
>>可以重载运算符,这意味着当作数具有该类或结构的类型时,类或结构可以重新定义其行为。 如果代码对此类或结构使用此运算符,请确保了解其重新定义的行为。 有关详细信息,请参阅 运算符过程。
示例:
下面的示例使用 >> 运算符对整型值执行算术右移。 结果始终与要移动的表达式具有相同的数据类型。
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(传播符号位)。