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


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

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

Синтаксис

result = pattern >> amount  

Детали

result
Обязательный. Целочисленное числовое значение. Результат смены битового шаблона. Тип данных совпадает с patternтипом данных.

pattern
Обязательный. Целочисленное числовое выражение. Битовый шаблон, который необходимо переместить. Тип данных должен быть целочисленным типом (SByte, , ShortByte, UShort, Integer, UIntegerLongили ULong).

amount
Обязательный. Числовое выражение. Количество битов для смены битового шаблона. Тип данных должен быть или Integer расширен до Integer.

Замечания

Арифметические сдвиги не циклические, что означает, что биты смещены с одного конца результата не повторно введены в другой конец. В арифметическом сдвиге вправо биты смещены за пределы самой правой битовой позиции не карта, а самый левый (знак) бит распространяется на битовые позиции, освобожденные слева. Это означает, что если pattern имеет отрицательное значение, для освобожденных позиций задано одно; в противном случае они равны нулю.

Обратите внимание, что типы Byteданных , UIntegerUShortи 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 (бит знака распространяется).

См. также