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


Оператор сдвига вправо без знака (>>>)

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

Сдвигает вправо биты выражения, не поддерживая знак.

expression1 >>> expression2

Аргументы

  • expression1
    Любое числовое выражение.

  • expression2
    Любое числовое выражение.

Заметки

Оператор >>> сдвигает вправо биты выражения expression1 на количество бит, указанных в выражении expression2. Слева добавляются нули. Цифры, сдвинутые за пределы диапазона, удаляются. Тип данных, возвращаемых данным оператором, определяется типом данных выражения expression1.

Чтобы избежать слишком большого сдвига выражения expression1 оператор >>> маскирует выражение expression2. В противном случае, если величина сдвига превышает количество битов, допустимых типом данных выражения expression1, все исходные биты удаляются и возвращается тривиальный результат. Чтобы при каждом сдвиге оставался хотя бы один исходный бит, операторы сдвига используют следующую формулу для вычисления фактической величины сдвига: маска выражения expression2 (использующая побитовый оператор И) с числом, на единицу меньшим, чем количество битов в выражении expression1.

Пример

Пример.

var temp
temp = -14 >>> 2

Переменная temp имеет значение 1073741820, поскольку при сдвиге значения -14 (11111111 11111111 11111111 11110010 в двоичном выражении) на два бита вправо получается значение 1073741820 (00111111 11111111 11111111 11111100 в двоичном выражении).

Чтобы продемонстрировать процесс маскирования, рассмотрим следующий пример.

var x : byte = 15;
// A byte stores 8 bits.
// The bits stored in x are 00001111
var y : byte = x >>> 10;
// Actual shift is 10 & (8-1) = 2
// The bits stored in y are 00000011
// The value of y is 3
print(y); // Prints 3

Требования

Версия 1

См. также

Основные понятия

Приоритет операторов

Сводные сведения об операторах

Приведение типов посредством побитовых операторов

Ссылки

Оператор назначения сдвига вправо без учета знака (>>>=)

Оператор побитового сдвига влево (<<)

Оператор побитового сдвига вправо (>>)