>> Оператор (Visual Basic)
Выполняет арифметический сдвиг вправо по битовой схеме.
Синтаксис
result = pattern >> amount
Детали
result
Обязательный. Целочисленное числовое значение. Результат смены битового шаблона. Тип данных совпадает с pattern
типом данных.
pattern
Обязательный. Целочисленное числовое выражение. Битовый шаблон, который необходимо переместить. Тип данных должен быть целочисленным типом (SByte
, , Short
Byte
, UShort
, Integer
, UInteger
Long
или ULong
).
amount
Обязательный. Числовое выражение. Количество битов для смены битового шаблона. Тип данных должен быть или Integer
расширен до Integer
.
Замечания
Арифметические сдвиги не циклические, что означает, что биты смещены с одного конца результата не повторно введены в другой конец. В арифметическом сдвиге вправо биты смещены за пределы самой правой битовой позиции не карта, а самый левый (знак) бит распространяется на битовые позиции, освобожденные слева. Это означает, что если pattern
имеет отрицательное значение, для освобожденных позиций задано одно; в противном случае они равны нулю.
Обратите внимание, что типы Byte
данных , UInteger
UShort
и ULong
неподписанные, поэтому для распространения бита знака нет. Если pattern
имеет любой неподписанный тип, то для освобожденных позиций всегда задано значение нулю.
Чтобы предотвратить сдвиг на более битах, чем результат может содержать, Visual Basic маскирует значение amount
маски размера, соответствующей типу pattern
данных. Двоичный И из этих значений используется для суммы сдвига. Маски размера приведены следующим образом:
Тип данных 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 (000 1010 0000 0000).result2
равно 160 (000 0000 1010 0000).result3
имеет значение 2 (0000 0000 0000 000 0010).result4
равно 640 (000 0010 1000 0000).result5
равно 0 (смещено 15 мест вправо).
Сумма result4
смены вычисляется как 18 И 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 (бит знака распространяется).