Иллюстрированный самоучитель по Perl

Побитовые операции

При побитовой операции логического ИЛИ | бит результата устанавливается равным 1, если хотя бы один из сравниваемых битов равен 1. Операция побитового логического ИЛИ для тех же двух чисел:

45.93 | 100

…даст результат равный юэ, так как при применении побитового логического ИЛИ к операндам:

00000000000000000000000000101101 (десятичное 45)

…и:

00000000000000000000000001100100 (десятичное 100)

…дает следующую цепочку битов:

00000000000000000000000001101101 (десятичное 109: 2**6+2**5+2**3+2'**2+2**1)

Побитовое исключающее ИЛИ при сравнении битов дает значение \ тогда, когда точно один из операндов имеет значение равное 1. Следовательно, 1 ^ 1=0 и 0 ^ 0=0, в остальных случаях результат сравнения битов равен 0. Поэтому для тех же чисел результатом операции будет десятичное число 73.

Операция логического отрицания ~ является унарной и ее действие заключается в том, что при последовательном просмотре битов числа все значения о заменяются на 1, и наоборот. Результат этой операции существенно зависит от используемого количества битов для представления целых чисел. Например, на 32-разрядной машине результатом операции ~1 будет последовательность битов:

11111111111111111111111111111110

…представляющая десятичное число 42949б7294=231 +230 +…+21, тогда как на 16-разрядной машине эта же операция даст число б534=231 +230 +…+21.

Бинарные операции побитового сдвига осуществляют сдвиг битов целого числа, заданного левым операндом, влево (") или вправо (") на количество бит, определяемых правым целочисленным операндом. При сдвиге вправо недостающие старшие биты, а при сдвиге влево младшие биты числа дополняются нулями. Биты, выходящие за разрядную сетку, пропадают. Несколько примеров операций сдвига представлено ниже:

# Битовое представление числа 22: (00000000000000000000000000010110)
22 >> 2 # Результат: (00000000000000000000000000000101) = 5
22 << 2 # Результат: (00000000000000000000000001011000) = 88

Все перечисленные операции работают и с отрицательными целыми числами, только при их использовании следует учитывать, что они хранятся в дополнительном коде. Двоичная запись неотрицательного целого числа называется прямым кодом. Обратным кодом называется запись, полученная поразрядной инверсией прямого кода. Отрицательные целые числа представляются в памяти компьютера в дополнительном коде, который получается прибавлением единицы к младшему разряду обратного кода. Например, представление числа -1 получается следующим образом:

00000000000000000000000000000001 # положительное число
1 11111111111111111111111111111110 # обратный код числа
1 11111111111111111111111111111111 # добавляем к младшему разряду 1
# и получаем представление числа -1

Именно с этим кодом числа – i будут работать все побитовые операции, если оно будет задано в качестве операнда одной из них.

Внимание
В языке Perl, как отмечалось в гл. 3, в арифметических операциях используется представление всех чисел в виде чисел с плавающей точкой удвоенной точности. Там же говорилось, что целое число можно задавать с 15 значащими цифрами, т.е. максимальное положительное целое число может быть 999 999 999 999 999. Но это число не имеет ничего общего с представлением целых чисел в компьютере, для которых может отводиться 64, 32 или 16 битов, в зависимости от архитектуры компьютера. Во всех побитовых операциях можно предсказать результат только если операндами являются целые числа из диапазона -232 -1.. 232 -1, так как ясен алгоритм их представления. Вещественные числа, не попадающие в этот диапазон, преобразуются к целым, но алгоритм их преобразования не описан авторами языка
.

Если Вы заметили ошибку, выделите, пожалуйста, необходимый текст и нажмите CTRL + Enter, чтобы сообщить об этом редактору.