Главная / Веб-программирование / PHP: Побитовые операторы

PHP: Побитовые операторы

Битовые операторы позволяют работать с поразрядным представлением аргументов.

ОператорИмяПримерРезультат&And$x & $yЗадаются биты, которые установлены и в $x, и в $y.|Or$x | $yЗадаются биты, которые установлены или в $x, или в $y.^Xor$x ^ $yЗадаются биты, которые установлены в $x или в $y, но не в обоих сразу.~Not~$xБиты, которые установлены в $x, не задаются. И наоборот.<< Shift left$x << $yСмещение битов $x на $y шагов влево.#>> Shift right$x >> $yСмещение битов $x на $y шагов вправо.*

# Каждый шаг означает «умножить на два».
* Каждый шаг означает «поделить на два».

Что такое бит?

В PHP битовых операциях бит (двоичный разряд) — это базовая единица информации, хранящаяся в вычислительной системе, которая существует в двух возможных состояниях, представленных как ON или OFF. В компьютерной системе состояние ON рассматривается как состояние 1, а OFF — 0. Эти состояния можно сравнить с двумя состояниями электрического переключателя (ВКЛ и ВЫКЛ) и т.п.

Значения задаются в двоичной системе исчисления. В десятичной системе построение числа основано на 10. Давайте посмотрим, как можно построить десятичное число —

231 = (2 ; 102 ) + (3 ; 101) + (1 ; 100)
= 200 + 30 + 1
= 231

Система двоичных чисел следует той же концепции. Единственное отличие состоит в том, что база равна 2, а не 10. Посмотрим, как двоичное число преобразовать в десятичное —

1011010=(1 x 26)+(0 x 25)+(1 x 24)+(1 x 23)+(0 x 22)+(1 x 21)+(0 x 20)
=(1 x 64) +(0 x 32)+(1 x 16)+(1 x 8)+(0 x 4)+(1 x 2)+(0 x 1)
=64+0+16+8+0+2+0
=90

Таким образом, (1011010)2= (90)10

Байт

Байт состоит из последовательности битов. Байт состоит из восьми битов. Максимальное значение байта составляет 255. Таким образом устанавливается значение места каждого бита.

Табличное представление байта

1 байт (8 бит) 8-ой7-ой6-ой5-ый4-ый3-ий2-ой1-ыйУстановленное значение1286432168421

Табличное представление байта, демонстрирующее, как максимальное значение байта в битовой операции с числами составляет 255:

1 байт (8 бит)Установленное значение1286432168421   11111111   2726252423222120   1286432168421=255

Десятичное число 93 может быть представлено в двоичной форме:

1 байт (8 бит)Установленное значение1286432168421   01011101   2726252423222120   0640168401=93

Побитовый оператор AND

Пример побитового оператора PHP AND с одним общим битом

<?php
$x=13;
$y=22;
echo $x & $y;
?>

Результат примера:

4

Пояснение

Опираясь на приведенные выше таблицы битовых операций, можно сказать, что единственный общий бит находится на третьей позиции с установленным значением 4. Таким образом, $x & $y = 4:

1 байт (8 бит)Установленное значение1286432168421  $x00001101=13$y00010110=22

В приведенной выше таблице для $x (13) установлено значение на первой, третьей и четвертой позиции. Значения позиции равны 1, 4 и 8. А для $y (22) значение установлено на второй, третьей и пятой позициях с соответствующими значениями: 2, 4 и 16.

Единственный бит, который является общим для $x и $y — это третий. Поэтому возвращается 4.

Рассмотрим другой пример оператора &, в котором больше бит.

Пример побитового оператора PHP AND с двумя общими битами

<?php
$x=77;
$y=198;
echo $x & $y;
?>

Результат примера PHP битовой операции:

68

Пояснение

1 байт (8 бит)Place Value1286432168421  $x01001101=77$y11000110=198

В приведенной выше таблице значение установлено для $x (77) на первой, третьей, четвертой и седьмой позиции. Значения позиций равны 1, 4, 8 и 64. Значение для $y (198) установлено на второй, третьей, седьмой и восьмой позициях с соответствующими значениями: 2, 4, 64 и 128.

Из приведенной выше таблицы видно, что общие для $x и $y — это третий и седьмой биты. Таким образом, возвращается 64 + 4 = 68.

Побитовый оператор OR

Пример побитового оператора PHP OR:

<?php
$x=5;
$y=11;
echo $x | $y;
?>

Результат примера:

15

Пояснение

1 байт (8 бит)Place Value1286432168421  $x00000101=5$y00001011=11

В приведенной выше таблице битовой операции с числами для $x (5) значение установлено на первой и третьей позициях. Значения позиций соответственно равны 1 и 4. Для $y (11) значения установлены на первой, второй и четвертой позициях с соответствующим значением: 1, 2 и 8.

Для $x и $y общими являются первый, второй, третий или четвертый бит. Возвращаемое значение представляет собой добавление значений позиций битов, то есть: 8 + 4 + 2 + 1 = 15.

Побитовый оператор XOR

Оператор Xor также выполняет побитовое сравнение двух числовых выражений и в результате устанавливает общий бит. Когда одно и только одно выражение является истинным, тогда он возвращает true.

В приведенной ниже таблице показано, как выполняется операция XOR:

Выражение 1Выражение 2РезультатFalseFalseFalseFalseTrueTrueTrueFalseTrueTrueTrueFalse

В приведенной ниже таблице показано побитовое сравнение оператора XOR:

Бит в Выражении 1Бит в Выражении 2Результат0000111011  

Пример использования побитового оператора PHP XOR

<?php
$x=12;
$y=11;
echo $x ^ $y;
?>

Результат примера PHP битовой операции:

7

Пояснение

1 байт (8 бит)Значение позиции1286432168421  $x00001100=12$y00001011=11

В приведенной выше таблице для $x (12) установлено значение на третьей и четвертой позиции. Значения позиции равны 4 и 8. А для $y (11) значение задано на первой, второй и четвертой позиции с соответствующими значениями: 1, 2 и 8.

$ x и $ y устанавливают вместе первый, второй, третий или четвертый бит. Но вместе они используют только 4-й бит. Поэтому возвращаемое значение представляет собой добавление места для них. Но не совместно используемый бит: 4 + 2 + 1 = 7.

Побитовый оператор NOT

В приведенной ниже таблице будет показано, как оператор NOT выполняет операции с $x и $y и возвращает true, когда заданный в одном выражении бит не задан в другом выражении.

Пример использования побитового оператора PHP NOT после оператора AND

<?php
$x=12;
$y=10;
echo $x & ~ $y;
?>

Результат примера:

4

Пояснение

1 байт (8 бит)Значение позиции1286432168421  $x00001100=12$y00001010=10

В приведенной выше таблице для $x (12) значение установлено на третьей и четвертой позициях. Значения позиции равны 4 и 8. Для $y (10) значение установлено на второй и четвертой позициях с соответствующими значениями 2 и 8.

Для $x и $y заданы биты на первой, второй, третьей и четвертой позициям, но общий для них только четвертый бит. Возвращаемое значение равно 4, так как это единственное значение, заданное для $x, но не заданное для $y.

Пример использования битовой операции PHP NOT перед оператором AND

<?php
$x=12;
$y=10;
echo ~ $x & $y;
?>

Результат примера:

2

Пояснение

В этом случае возвращаемое значение равно 2, потому что бит установлен для $y, но не установлен для $x.

Сдвиг битов

Если a и b — это два числа. Оператор сдвига перемещает бит b на определенное количество позиций. Каждый шаг означает умножение на два (сдвиг влево). Если это сдвиг вправо, тогда каждый шаг означает деление на два.

Пример использования побитового оператора сдвига влево

<?php
$x=8;
$y=3;
echo $x << $y;
?>

Результат примера битовой операции

64

Пояснение

1 байт (8 бит)Значение позиции1286432168421  $x00001000=8Результат01000000=64

В приведенном выше примере берется значение $x, которое равно 8, и выполняется операция сдвига влево: 8 умножается на 2 три раза. Таким образом, мы получаем 8 x 2 x 2 x 2 = 64.

Еще один пример использования оператора сдвига влево

<?php
$x=12;
$y=4;
echo $x << $y;
?>

Результат примера:

192

Пояснение

В приведенном выше примере берется значение $x, равное 12, и выполняется операция сдвига влево: умножается на 2 четыре раза. Таким образом, мы получаем 12 x 2 x 2 x 2 x 2 = 192.

1 байт (8 бит)Значение позиции1286432168421  $x00001100=12Результат11000000=192

Пример использования побитового оператора сдвига вправо

<?php
$x=8;
$y=3;
echo $x >> $y;
?>

Результат примера битовой операции с числами:

1

Пояснение

1 байт (8 бит)Значение позиции1286432168421  $x00001000=8Результат00000001=1

В приведенном выше примере берется значение $x, которое равно 8, и выполняется операция сдвига вправо: 8 делится на 2 три раза. Таким образом, получаем 8/2 = 4/2 = 2/2 = 1.

Еще один пример использования оператора сдвига вправо

<?php
$x=96;
$y=5;
echo $x >> $y;
?>

Результат примера:

3

Пояснение

1 байт (8 бит)Значение позиции1286432168421  $x01100000=96Результат00000011=3

В приведенном выше примере берется значение $x, равное 96, и выполняется операция сдвига вправо: 96 делится на 2 пять раз. Таким образом, мы получаем 96/2 = 48/2 = 24/2 = 12/2 = 6/2 = 3.

Пример использования оператора сдвиг вправо с превышением значения шага

<?php
$x=64;
$y=7;
echo $x >> $y;
?>

Результат примера PHP битовой операции:

0

Пояснение

1 байт (8 бит)Значение позиции1286432168421  $x01000000=64Результат00000000=0

В приведенном выше примере берется значение $x, равное 64, и выполняется операция сдвига вправо: 64 делится на 2 семь раз. При делении в определенный момент нам нечего делить. Таким образом, результат равен 0.

Перевод статьи «PHP Bitwise operator» дружной командой проекта Сайтостроение от А до Я.

О нас seoexpert

продвижение сайта,seo оптимизация,поисковое продвижение,раскрутка сайтов,поисковая оптимизация,продвижение сайта в гугл,seo раскрутка,продвижение сайтов в яндексе,продвижение сайта в google,продвижение сайтов в топ 10,Оптимизация и продвижение сайтов,услуги продвижения сайта,заказать продвижение,продвижение сайтов в топ,сео раскрутка сайта

Смотрите также

Определение типа данных double в C, C++ и C#

Double – 64-разрядная переменная с плавающей запятой Тип double — это основной тип данных, который ...