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


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

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

Сдвигает значение переменной вправо на количество битов, указанное в значении выражения, не сохраняя знака, и присваивает результат переменной.

result >>>= expression

Аргументы

  • result
    Любая числовая переменная.

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

Заметки

Использование этого оператора практически ничем не отличается от указания выражения result = result >>> expression за одним исключением: значение result вычисляется только один раз.

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

Пример

Пример.

var temp
temp = -14
temp >>>= 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
x >>>= 10;
// Actual shift is 10 & (8-1) = 2
// The bits stored in x are 00000011
// The value of x is 3
print(x); // Prints 3

Требования

Версия 1

См. также

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

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

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

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

Ссылки

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

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

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

Оператор присвоения (=)