Язык Perl гарантирует, что все
1 * (2**3) + 0 * (2**2) + 1 * -(2**1) + 0 * (2**0)
Язык Perl гарантирует, что все целые числа имеют длину 32 бит, хотя на некоторых машинах они могут представляться и 64 битами. Именно с двоичными представлениями целых чисел и работают все побитовые операции, преобразуя и отрицательные, и положительные числа к целому типу данных.
Операция & побитового логического И сравнивает каждый бит правого операнда с соответствующим битом левого операнда. Если оба сравниваемых бита имеют значение 1, то соответствующий бит результирующего значения операции устанавливается равным 1, в противном случае значением бита результата будет о. В качестве примера рассмотрим следующее выражение
45.93 & 100
Прежде всего, правый операнд преобразуется к целому 45, двоичное представление которого будет
00000000000000000000000000101101
Двоичное представление левого операнда юо будет иметь вид
00000000000000000000000001100100
Результатом побитового логического И будет следующая последовательность битов
00000000000000000000000000100100
Она соответствует десятичному целому числу 36. Следовательно, значением выражения 45.93 & юо будет целое число 36.
Замечание
В этом примере мы специально использовали 32-битное представление целых чисел, хотя для бинарных побитовых операций лидирующие нули не имеют значения. Они существенны только при операциях побитового логического отрицания и сдвигов.
При побитовой операции логического ИЛИ | бит результата устанавливается равным 1, если хотя бы один из сравниваемых битов равен 1. Операция побитового логического ИЛИ для тех же двух чисел
45.93 | 100
даст результат равный юэ, так как при применении побитового логического ИЛИ к операндам
00000000000000000000000000101101 (десятичное 45)
И
00000000000000000000000001100100 (десятичное 100)
дает следующую цепочку битов
00000000000000000000000001101101 (десятичное 109:
2**6+2**5+2**3+2'**2+2**1)
Побитовое исключающее ИЛИ при сравнении битов дает значение \ тогда, когда точно один из операндов имеет значение равное 1. Следовательно, 1 ^ 1=о и о ^ о=о, в остальных случаях результат сравнения битов равен о. Поэтому для тех же чисел результатом операции будет десятичное число 73.
Содержание Назад Вперед