Оператор ''>>'' (Visual Basic)
Выполняется арифметический сдвиг битового шаблона вправо.
result = pattern >> amount
Части
result
Обязательный.Целое числовое значение.Результат сдвига битового шаблона.Тип данных такой же, как для pattern.pattern
Обязательный.Целое числовое выражение.Битовый шаблон, подлежащий сдвигу.Данные должны быть целого типа (SByte, Byte, Short, UShort, Integer, UInteger, Long или ULong).amount
Обязательный.Числовое выражение.Количество разрядов, на которое следует сдвинуть битовый шаблон.Данные должны относиться к типу Integer или допускать расширение до типа Integer.
Заметки
Арифметические сдвиги не являются циклическими. Это означает, что биты, сдвинутые в один конец результата, не вводятся повторно в другой конец.В арифметическом сдвиге вправо биты, сдвинутые за пределы крайней правой позиции, отбрасываются, а крайний левый (знаковый) бит передается в освободившиеся слева позиции битов.Это значит, что если pattern имеет отрицательное значение, освободившиеся позиции задаются как единица; иначе они задаются как ноль.
Обратите внимание, что типы данных Byte, UShort, UInteger и ULong — это типы данных без знака, поэтому знаковый бит для передачи отсутствует.Если pattern относится к какому-либо типу без знака, освободившиеся позиции всегда обнуляются.
Чтобы предотвратить сдвиг на число битов, превышающее допустимое число битов результата, Visual Basic маскирует значение элемента amount с помощью маски размера, соответствующей типу данных элемента pattern.Двоичное AND этих значений используется для задания величины сдвига.Используются следующие маски размера:
Тип данных pattern |
Маска размера (десятичная) |
Маска размера (шестнадцатеричная) |
---|---|---|
SByte, Byte |
7 |
&H00000007 |
Short, UShort |
15 |
&H0000000F |
Integer, UInteger |
31 |
&H0000001F |
Long, ULong |
63 |
&H0000003F |
Если amount равно нулю, значение из result совпадает со значением pattern.Если amount имеет отрицательное значение, берется значение без знака и маскируется с помощью соответствующей маски размера.
В результате арифметического сдвига никогда не создаются исключения переполнения.
Перегрузка
Оператор >> может быть перегружен; это означает, что класс или структура может переопределить его поведение, если операнд имеет тип соответствующего класса или структуры.Если в коде используется этот оператор для такого класса или структуры, убедитесь, что его переопределенное поведение вам понятно.Дополнительные сведения см. в разделе Процедуры операторов (Visual Basic).
Пример
В приведенном ниже примере оператор >> используется для выполнения арифметических сдвигов целых значений вправо.Результат всегда имеет тот же тип данных, что и выражение, для которого выполнен сдвиг.
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 (знаковый бит передан).
См. также
Ссылки
Операторы поразрядного сдвига (Visual Basic)
Операторы присваивания (Visual Basic)
Порядок применения операторов в Visual Basic
Список операторов, сгруппированных по функциональному назначению (Visual Basic)