Библиотека knigago >> Компьютеры и Интернет >> Учебники и самоучители по компьютеру >> Scala. Профессиональное программирование

Мартин Одерски - Scala. Профессиональное программирование

Scala. Профессиональное программирование
Книга - Scala. Профессиональное программирование.  Мартин Одерски  - прочитать полностью в библиотеке КнигаГо
Название:
Scala. Профессиональное программирование
Мартин Одерски

Жанр:

Учебники и самоучители по компьютеру

Изадано в серии:

неизвестно

Издательство:

неизвестно

Год издания:

-

ISBN:

неизвестно

Отзывы:

Комментировать

Рейтинг:

Поделись книгой с друзьями!

Помощь сайту: донат на оплату сервера

Краткое содержание книги "Scala. Профессиональное программирование"


Читаем онлайн "Scala. Профессиональное программирование". [Страница - 40]

Обычно все аргументы вычисляются
перед входом в метод, тогда каким же образом метод может избежать вычисления своего второго аргумента? Дело в том, что у всех методов Scala
есть средство для задержки вычисления его аргументов или даже полной
его отмены. Оно называется «параметр, передаваемый по имени» и будет
рассмотрено в разделе 9.5.

5.7. Поразрядные операции
Scala позволяет выполнять операции над отдельными разрядами целочис­
ленных типов, используя несколько поразрядных методов. К таким методам
относятся поразрядное И (&), поразрядное ИЛИ (|) и поразрядное исклю­
чающее ИЛИ (^)1. Унарный поразрядный оператор дополнения (~, метод
unary_~) инвертирует каждый разряд в своем операнде, например:
1

Метод поразрядного исключающего ИЛИ выполняет соответствующую опера­
цию в отношении своих операндов. Из одинаковых разрядов получается 0, а из
разных -1. Следовательно, выражение 0011 ^ 0101 вычисляется в 0110.

118   Глава 5



Основные типы и операции

1 & 2 // 0: Int
1 | 2 // 3: Int
1 ^ 3 // 2: Int
~1
// -2: Int

В первом выражении, 1 & 2, выполняется поразрядное И над каждым раз­
рядом чисел 1 (0001) и 2 (0010) и выдается результат 0 (0000). Во втором
выражении, 1 | 2, выполняется поразрядное ИЛИ над теми же операндами
и выдается результат 3 (0011). В третьем выражении, 1 ^ 3, выполняется
поразрядное исключающее ИЛИ над каждым разрядом 1 (0001) и 3 (0011)
и выдается результат 2 (0010). В последнем выражении, ~1, инвертируется
каждый разряд в 1 (0001) и выдается результат –2, который в двоичной
форме выглядит как 11111111111111111111111111111110.
Целочисленные типы Scala также предлагают три метода сдвига: влево () и беззнаковый сдвиг вправо (>>>). Методы сдвига, примененные
в инфиксной форме записи операторов, сдвигают разряды целочисленного
значения, указанные слева от оператора, на количество разрядов, указанное
в целочисленном значении справа от оператора. При сдвиге влево и беззнако­
вом сдвиге вправо разряды по мере сдвига заполняются нулями. При сдвиге
вправо разряды указанного слева значения по мере сдвига заполняются зна­
чением самого старшего разряда (разряда знака). Вот несколько примеров:
-1 >> 31 // -1: Int
-1 >>> 31 // 1: Int
1 > 31, в числе –1 происходит сдвиг вправо на 31 разряд­
ную позицию. В значении типа Int содержатся 32 разряда, поэтому данная
операция, по сути, перемещает самый левый разряд до тех пор, пока тот не
станет самым правым1. Поскольку метод >> выполняет заполнение по мере
сдвига единицами ввиду того, что самый левый разряд числа –1 — это 1,
результат получается идентичным исходному левому операнду и состоит
из 32 единичных разрядов, или равняется –1. Во втором примере, –1 >>> 31,
самый левый разряд опять сдвигается вправо в самую правую позицию, од­
нако на сей раз освобождающиеся разряды заполняются нулями. Поэтому
результат в двоичном виде получается 00000000000000000000000000000001,
или 1. В последнем примере, 1 --">

Оставить комментарий:


Ваш e-mail является приватным и не будет опубликован в комментарии.