Поделиться через


Оператор ''>>'' (Visual Basic)

Обновлен: Ноябрь 2007

Выполняется арифметический сдвиг битового шаблона вправо.

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 имеет отрицательное значение, берется значение без знака и маскируется с помощью соответствующей маски размера.

В результате арифметического сдвига никогда не создаются исключения переполнения.

Перегрузка

Оператор >> может быть перегружен; это означает, что класс или структура может переопределить его поведение, если операнд имеет тип соответствующего класса или структуры. Если в коде используется этот оператор для такого класса или структуры, убедитесь, что его переопределенное поведение вам понятно. Дополнительные сведения см. в разделе Процедуры операторов.

Пример

В приведенном ниже примере оператор >> используется для выполнения арифметических сдвигов целых значений вправо. Результат всегда имеет тот же тип данных, что и выражение, для которого выполнен сдвиг.

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

Список операторов, сгруппированных по функциональному назначению