Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Vtoraya_chast_uchebnika_po_WWW_Okonchat_variant...doc
Скачиваний:
31
Добавлен:
27.09.2019
Размер:
6.06 Mб
Скачать

Пример 2‑24

<?php

$c =1 & 5;

echo $c, "<br>";

$a= 1;

$b=5;

$c =$a & $b;

echo $c, "<br>";

$c =$a | $b;

echo $c, "<br>";

$c =$a ^ $b;

echo $c, "<br>";

$c =~ $a;

echo $c, "<br>";

$c =$a << $b;

echo $c, "<br>";

$c =$a>> $b;

echo $c, "<br>";

echo "12" ^ "9"; // Отобразит символ возврата каретки (ascii 8)

// ('1' (ascii 49)) ^ ('9' (ascii 57)) = #8

echo "hallo" ^ "hello"; /* Выведет следующие ASCII-значения: #0 #4 #0 #0 #0*/

?>

Установленными являются биты (разряды), значения которых изменились в результате присвоения ячейке конкретного значения или при использовании конкретного числа или строки.

Побитовые операторы похожи на логические операторы, работающие с логическими выражениями. По существу они и являются такими, но операндами для них являются биты целых или строковых данных.

Таблица 2‑7

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

Название

Пример

Описание и результат

Побитовое 'и'

$c=$a & $b

В результате ($c) устанавливаются только те биты, которые установлены и в $a, и в $b.

Побитовое 'или'

$c=$a | $b

Устанавливаются те биты, которые установлены либо в $a, либо в $b.

Исключающее ′или

$c=$a ^ $b

Устанавливаются только те биты, которые установлены либо только в $a, либо только в $b

Отрицание ′не′

$c=~ $a

Устанавливаются те биты, которые в $a не установлены, и наоборот.

Сдвиг влево

$c=$a << $b

Все биты переменной $a сдвигаются на $b позиций влево (каждая позиция подразумевает 'умножение на 2')

Сдвиг вправо

$c=$a >> $b

Все биты переменной $a сдвигаются на $b позиций вправо (каждый сдвиг подразумевает 'деление на 2')

Таблица 2‑8

Результаты работы побитовых операторов (поп) для значений $a =1 и $b=5 (в десятичной системе) $c=$a (поп) $b

Операция

Значение

$c

&

1

|

5

^

4

~

-2

<<

32

>>

0

Полезные правила по работе с побитовыми операторами:

  • Нельзя использовать сдвиг вправо более чем на 32 бита на тридцатидвухразрядных системах.

  • Не используйте сдвиг вправо для получения чисел, требующих для записи более тридцати двух двоичных разрядов (бит).

2.2.7. Класс логических операторов

Мы постепенно продвигаемся к теме управления ходом выполнения инструкций (строк) программы PHP с помощью операторов управления. По умолчанию инструкции программы интерпретируются и выполняются в линейном порядке. Однако, как и обычной жизни, решение хоть сколько-нибудь сложных задач невозможно без отклонений от такого порядка. Эти отклонения происходят при выполнении или невыполнении некоего условия.

Изучение закономерностей выбора направления решения задачи (принятие решений), в практике человеческого бытия привело к созданию науки, моделирующей эти закономерности – алгебры логики18.

Очень коротко говоря, основой алгебры логики являются:

  1. Высказывание, которое может быть верным или неверным.

  2. Логическая величина, которая может иметь всего два значения: ложь или истина.

  3. Логические операции над логическими величинами.

  4. Логическое выражение, состоящее из высказываний, логических величин и логических операций.

  5. Правила исчисления логического выражения.

В информатике основным высказыванием является сравнение двух величин. Если высказывание справедливо, то его значение должно принимать значение, равное ИСТИНЕ, в противном случае – является ЛОЖЬЮ.

Реализация исчисления истинности сравнения в PHP (да и в других языках) осуществляется с помощью операторов сравнения. По назначению их можно отнести к классу логических операторов.

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

Итак, операторы сравнения, позволяют сравнивать между собой два значения.

Это в своем роде уникальные операции, потому что независимо от типов своих аргументов они всегда возвращают одно из двух: false или true. Операции сравнения (Таблица 2 -9) позволяют сравнивать два значения между собой и, если условие выполнено, возвращают true, а если нетfalse.

В PHP разрешается сравнивать только скалярные переменные. Массивы и объекты в PHP до пятой версии нельзя было сравнивать. Однако при сравнении на равенство при помощи оператора ==, PHP не выдавал предупреждения об ошибке. При таком сравнении оба операнда преобразуются в слово array, которое потом и сравнивается. Поэтому результатом сравнения будет ИСТИНА (TRUE).

Начиная с версии PHP 5, стало возможным применение операций сравнения не только массивов, но и объектов. Однако эти операции достаточно специфичны, и не рассматриваются в этом пособии.

В случае если вы сравниваете целое со строкой, строка будет преобразована к числу. В случае если вы сравниваете две числовые строки, они сравниваются как целые числа.

Подведём итог: операции сравнения образуют элементарные логические выражения. Как к таковым к ним могут применяться логические операции, и они могут использоваться в операторах управления ходом выполнения программы в качестве условий перехода.

Таблица 2‑9

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

Пример

Название

Результат

$a = = $b

Равно

Равно TRUE если $a равно $b

$a = = = $b

Тождественно

равно

TRUE если $a равно $b и имеет тот же тип. (Добавлено в PHP 4)

$a != $b

Не равно

TRUE если $a не равно $b

$a <> $b

Не равно

TRUE если $a не равно $b

$a != = $b

Тождественно не равно

TRUE если $a не равно $b или в случае, если они разных типов (Добавлено в PHP 4)

$a < $b

Меньше

TRUE если $a строго меньше $b

$a > $b

Больше

TRUE если $a строго больше $b

$a <= $b

Меньше или равно

TRUE если $a is меньше или равно $b

$a >= $b

Больше или равно

TRUE если $a больше или равно $b

Логические выражения и «классические» логические операторы

Классические определения логического выражения таковы:

  • логическим является выражение, у которого может быть только два значения – истина или ложь;

  • логическое выражение состоит из логических операндов, соединённых знаками логических операций.

Однако в PHP в качестве истины может выступать любое ненулевое число или непустая строка, а под ложью – всё остальное. Поэтому классическое определение в PHP должно быть расширено. Хотя лучше этого расширения не использовать на практике.

Логические операторы (Таблица 2 -10) предназначены исключительно для работы с логическими выражениями и возвращают false или true.

Таблица 2‑10

Логические операторы PHP

Пример

Название

Результат

$a and $b

Логическое 'и'

TRUE если и $a, и $b TRUE

$a or $b

Логическое 'или'

TRUE если или $a, или $b TRUE

$a xor $b

Исключающее 'или'

TRUE если $a, или $b TRUE, но не оба

! $a

Отрицание

TRUE если $a не TRUE

$a && $b

Логическое 'и'

TRUE если и $a, и $b TRUE.

$a || $b

Логическое 'или

TRUE если или $a, или $b TRUE.

К особенностям логических операций можно отнести следующее:

  • Смысл двух разных вариантов для операторов "and" и "or" в том, что они работают с различными приоритетами19.

  • Следует заметить, что вычисление логических выражений, содержащих такие операторы логических операций, идет всегда слева направо.

  • Если результат вычисления логического выражения с использованием логической операции очевиден с самого начала вычисления (например, false && что-то всегда дает false), то вычисления обрываются, даже если в выражении присутствуют вызовы функций. Например, в операторе $logic = 0&&(time()>100); стандартная функция time() никогда не будет вызвана.

  • Необходимо проявлять осторожность с использованием логических операций - не забывать про удваивание символа, так как при этом их можно спутать с побитовыми операциями. Например, | и || — это два совершенно разных оператора, один из них может потенциально возвращать любое число, а второй — только false и true.

  • Операторы инкремента (++) и декремента (--) не работают с логическими переменными.