Мартин Одерски - 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 --">
перед входом в метод, тогда каким же образом метод может избежать вычисления своего второго аргумента? Дело в том, что у всех методов 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 --">
Книги схожие с «Scala. Профессиональное программирование» по жанру, серии, автору или названию:
У. Маурер - Введение в программирование на языке ЛИСП Жанр: Lisp, Scheme Год издания: 1976 Серия: Математическое обеспечение ЭВМ |
Владимир Павлович Дьяконов - Применение персональных ЭВМ и программирование на языке Бейсик Жанр: Basic, Visual Basic, VB Script, VBA и т.п. Год издания: 1989 |
Кристиан Качин, Рашид Гуерру, Луис Родригес - Введение в надежное и безопасное распределенное программирование Жанр: Параллельное и распределенное программирование Год издания: 2016 |
Сергей А. Немнюгин, Ольга Л. Стесик - Параллельное программирование для многопроцессорных вычислительных систем Жанр: Параллельное и распределенное программирование Год издания: 2002 Серия: Мастер программ |