Scala. Профессиональное программирование [Мартин Одерски] (pdf) читать постранично, страница - 36

Книга в формате pdf! Изображения и текст могут не отображаться!


 [Настройки текста]  [Cбросить фильтры]

вправо (>>>). Методы сдвига, примененные
в инфиксной форме записи операторов, сдвигают разряды целочисленного
значения, указанные слева от оператора, на количество разрядов, указанное
в целочисленном значении справа от оператора. При сдвиге влево и беззнако­
вом сдвиге вправо разряды по мере сдвига заполняются нулями. При сдвиге
вправо разряды указанного слева значения по мере сдвига заполняются зна­
чением самого старшего разряда (разряда знака). Вот несколько примеров:
-1 >> 31 // -1: Int
-1 >>> 31 // 1: Int
1 > 31, в числе –1 происходит сдвиг вправо на 31 разряд­
ную позицию. В значении типа Int содержатся 32 разряда, поэтому данная
операция, по сути, перемещает самый левый разряд до тех пор, пока тот не
станет самым правым1. Поскольку метод >> выполняет заполнение по мере
сдвига единицами ввиду того, что самый левый разряд числа –1 — это 1,
результат получается идентичным исходному левому операнду и состоит
из 32 единичных разрядов, или равняется –1. Во втором примере, –1 >>> 31,
самый левый разряд опять сдвигается вправо в самую правую позицию, од­
нако на сей раз освобождающиеся разряды заполняются нулями. Поэтому
результат в двоичном виде получается 00000000000000000000000000000001,
или 1. В последнем примере, 1