• Как заработать на сайте
  • Как заработать в интернете
  • Инвестиции в интернете
  • Партнерские программы
  • Рейтинг парт. программ
  • SEO продвижение
  • Вопросы и ответы
  • Термины оптимизатора
  • HTML-уроки
  • Интернет
  • Мои услуги
  • Реклама на сайте
  • Обратная связь
‘тоимость баннера за месяц: 30$ (подробности)
Главная → PHP уроки → Поразрядные операции в PHP

Поразрядные операции в PHP

Рассмотрим поразрядные операции в PHP. Эти операции встречаются не часто, но зачастую их удобно использовать. В таблице ниже приведены поразрядные операции.

Оператор Описание
& Поразрядное "И" (логическое AND)
| Поразрядное "ИЛИ" (логическое OR)
^ Поразрядное исключающее "ИЛИ" (сложение по модулю 2 "XOR")
~ Поразрядное инвертирование (NOT)
<< Поразрядный сдвиг влево на количество указанное после оператора
>> Поразрядный сдвиг вправо на количество указанное после оператора

Чтобы понять как работают поразрядные операции, нужно уметь работать с двоичной системой счисления. Я постараюсь вкратце изложить необходимые знания для того, чтобы Вы смогли усвоить тему.

Помимо десятичной системы счисления (к которой все привыкли), существует ещё и двоичная система счисления, где числа состоят только из 0 и 1. Все данные в вычислительных устройствах хранятся в двоичной системе счисления. Я не буду в подробностях описывать перевод из десятичной системы в двоичную и обратно, поскольку это отдельная тема. Рассмотрим маленький пример, чтобы Вы примерно понимали как это происходит: допустим нам надо перевести число 10112 в десятичную систему счисления: 10112 = (1×23 + 0×22 + 1×21 + 1×20)10 = 1110.

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


1. Поразрядное "И"

Допустим у нас есть два двоичных числа: 010112 и 011012. Применим операцию поразрядного "И": 010112 & 011012 = 010012.
Правило: Каждый разряд сравнивается с таким же разрядом другого числа. В случае если оба разряда равны 1, то и результатом будет 1, иначе если есть хотя бы один 0, то в ответ будет 0. Рассмотрим пример поразрядного "И" на PHP:

<?php //Присваиваем переменным значения: $num1 = 10; //в двоичном коде число 10 равно 1010 $num2 = 7; //в двоичном коде число 7 равно 0111 echo "\$num1 & \$num2 = ". ($num1 & $num2); //получим 2 (00102) //Можно было написать и так: echo "<br/>10 & 7 = ". (10 & 7); ?>

Результатом выше описанного примера будет число 2, поскольку после применения поразрядного "И" к числам 1010 и 0111 в результате мы получим число 0010 в двоичном коде, а при переводе в десятичную систему получим число 2.



2. Поразрядное "ИЛИ"

Поразрядное "ИЛИ" очень похоже на поразрядное "И". В данном случае правило следующее: если при поразрядном сравнение есть хотя бы одна 1, то результат будет 1. Если оба числа 0, то результат будет 0. Например: 010112 | 011012 = 011112. Рассмотрим пример поразрядного "ИЛИ" на PHP:

<?php //Присваиваем переменным значения: $num1 = 10; //в двоичном коде число 10 равно 1010 $num2 = 7; //в двоичном коде число 7 равно 0111 echo "\$num1 | \$num2 = ". ($num1 | $num2); //получим 15 (11112) //Можно было написать и так: echo "<br/>10 | 7 = ". (10 | 7); ?>

При поразрядном сравнении двоичных чисел 1010 и 0111 мы получим двоичное число 1111, которое при переводе в десятичную систему счисления даст 15.


3. Поразрядное исключающее "ИЛИ"

Эту операцию также называют сложением по модулю 2. Опять нужно сравнивать все числа поразрядно, соблюдая следующее правило: если при сравнении получается две 1 или два 0, то в результате будет 0, иначе будет 1. Например, 010112 ^ 011012 = 001102. Рассмотрим пример поразрядного исключающего "ИЛИ" на PHP:

<?php //Присваиваем переменным значения: $num1 = 10; //в двоичном коде число 10 равно 1010 $num2 = 7; //в двоичном коде число 7 равно 0111 echo "\$num1 ^ \$num2 = ". ($num1 ^ $num2); //получим 13 (11012) //Можно было написать и так: echo "<br/>10 ^ 7 = ". (10 ^ 7); ?>

4. Поразрядное инвертирование (NOT)

У операции NOT очень простое правило: если был 0, то будет 1 и наоборот, то есть происходит самое обыкновенное инвертирование. Например, ~0110102 = 1001022. Рассмотрим пример поразрядного инвертирования на PHP:

<?php //Присваиваем переменным значения: $num1 = 10; echo "~\$num1 = ". ~$num1 ; //получим -11 //Можно было написать и так: echo "<br/>~10 = ". ~10; ?>

~10 = -11. Этот результат можно объяснить тем, что в двоичном коде число 10 представляется так: 00000000 00000000 00000000 00001010 (поскольку в PHP на хранение одного числа выделяется 4 байта или 32 бита). После операции инвертирования получим: 11111111 11111111 11111111 11110101, что при переводе в десятичную систему дает число -11.


5. Поразрядный сдвиг влево (<<)

Трудно сформулировать правило для поразрядный сдвига влево (<<), поэтому лучше приведу простенький пример. Например, у нас есть число 10 (10102), применяя операцию сдвига влево (<<) на одну позицию мы получим следующее двоичное число: 101002, которое при переводе в десятичную систему даст 20. Приведем ещё пример: пусть есть число 14 (11102), сдвинем его влево на три позиции. В результате получим 11100002, что при переводе в десятичную систему счисления даст число 112. Рассмотрим пример поразрядного сдвига влево на PHP:

<?php //Присваиваем переменным значения: $num1 = 10; echo "\$num1 << 1 = ". ($num1 << 1); //получим 20 (101002) //Можно было написать и так: echo "<br/>10 << 1 = ". (10 << 1); //Другой пример: echo "<br/>14 << 3 = ". (14 << 3); //получим 112 echo "<br/>6 << 31 = ". (6 << 31); //получим 0 (т.е. все разряды ушли влево) // и остались одни нули ?>

6. Поразрядный сдвиг вправо (>>)

Смысл операции поразрядного сдвига вправо такой же как и в предыдущем случае. Разница лишь в том, что разряды сдвигаются не влево, а вправо. Например, у нас есть число 10 (10102), применяя операцию сдвига вправо (<<) на одну позицию мы получим следующее двоичное число: 1012, что в десятичной системе счисления равно 5. Рассмотрим пример поразрядного сдвига вправо на PHP:

<?php //Присваиваем переменным значения: $num1 = 10; echo "\$num1 >> 1 = ". ($num1 >> 1); //получим 5 (1012) //Можно было написать и так: echo "<br/>10 >> 1 = ". (10 >> 1); //Другой пример: echo "<br/>100 >> 3 = ". (100 >> 3); //получим 12 ?>

Следующий урок: Условный оператор if...else.



Читайте также:
• Переменные в php
• Использование методов GET и POST
• Типы данных в php
• Операции над числами в php
• Как добавить кнопку "Наверх" на сайте
• Как сделать форму обратной связи на php с каптчей
• Коды спецсимволов в HTML
• Коды и названия html цветов для сайта

← Перейти в каталог php уроков

Основные разделы
  • Главная
  • Партнерские программы
  • Рейтинг партнерских программ
  • Статьи про SEO
  • Термины SEO
  • Описание бирж
  • HTML-уроки и советы
  • CSS-уроки
  • Биткоины
  • PHP-уроки
  • Бинарные опционы
  • Социальные сети
  • Обзоры систем
  • Все про CMS
  • Реклама в интернете
Важно
  • Продвижение сайта
  • Аудит внутренней оптимизации
  • Куплю Ваш сайт
  • Куплю Вашу подпись на форуме
  • Подписаться на рассылку
  • Реклама на сайте
  • Карта сайта
  • Обратная связь
© 2010-2025 - Zarabotat-Na-Sajte.ru