Побитовые операции в PHP? - PullRequest
29 голосов
/ 25 января 2010

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

Можете ли вы привести примеры использования?

Ответы [ 2 ]

47 голосов
/ 25 января 2010

Вы можете использовать его для битовых масок, чтобы кодировать комбинации вещей. По сути, он работает, давая каждому биту значение, поэтому, если у вас есть 00000000, каждый бит представляет что-то, кроме того, что также является одним десятичным числом. Допустим, у меня есть некоторые предпочтения для пользователей, которых я хочу хранить, но моя база данных очень ограничена с точки зрения хранения. Я мог бы просто сохранить десятичное число и извлечь из этого то, какие предпочтения выбраны, например, 9 равно 2^3 + 2^0 равно 00001001, поэтому у пользователя есть предпочтение 1 и предпочтение 4.

 00000000 Meaning       Bin Dec    | Examples
 │││││││└ Preference 1  2^0   1    | Pref 1+2   is Dec   3 is 00000011
 ││││││└─ Preference 2  2^1   2    | Pref 1+8   is Dec 129 is 10000001
 │││││└── Preference 3  2^2   4    | Pref 3,4+6 is Dec  44 is 00101100
 ││││└─── Preference 4  2^3   8    | all Prefs  is Dec 255 is 11111111
 │││└──── Preference 5  2^4  16    |
 ││└───── Preference 6  2^5  32    | etc ...
 │└────── Preference 7  2^6  64    |
 └─────── Preference 8  2^7 128    |

Дальнейшее чтение

18 голосов
/ 25 января 2010

Побитовые операции чрезвычайно полезны в информации о полномочиях.Например:

function is_moderator($credentials)
{ return $credentials & 4; }

function is_admin($credentials)
{ return $credentials & 8; }

и т. Д. *

Таким образом, мы можем сохранить простое целое число в одном столбце базы данных, чтобы иметь все учетные данные в системе.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...