| |
|
|
| | В учебнике по теме: "Поразрядные операторы".
& Поразрядная конъюнкция (AND)
| Поразрядная дизъюнкция (OR)
^ Поразрядное исключающее ИЛИ (XOR)
~ Поразрядное отрицание (NOT)
<< Сдвиг влево битового представления значения левого целочисленного операнда на количество разрядов, равное значению правого целочисленного операнда
>> Сдвиг вправо битового представления значения левого целочисленного операнда на количество разрядов, равное значению правого целочисленного операнда
Пример:
<?php
echo(4<<2); // равно 16
echo"<br>";
echo(5>>1); // равно 2
echo"<br>";
echo(6&5); // равно 4
echo"<br>";
echo(6|5); // равно 7
echo"<br>";
echo(6^5); // равно 3
?>
|
Двоичный код для 4 равен 100, при сдвиге влево на 2 разряда код 100 становится равным 10000, что соответствует десятичному значению 16. Остальные примеры могут быть разобраны аналогично. Обратим внимание на то, что сдвиг влево на n позиций эквивалентен умножению на 2n, а сдвиг вправо уменьшает соответствующее значение в 2n раз с отбрасыванием дробной части результата (поэтому 5>>1 равно 2). Основное назначение этих операторов – быстрые вычисления. Так как их поддержка осуществляется на аппаратном уровне (процессор), алгоритмы, выполненные с использованием данных операторов получаются очень производительными.
Первый пример вроде как понял, но остальные нет. :-( В каких случаев будут применяться поразрядные операторы?
Если несложно, пожалуйста, объясните мне все примеры поразрядных операторов. Мне кажется, что потом пригодиться.
P.S.: И хотелось бы поподробнее получить ответ на данную тему.
Всем спасибо. :-) | |
| |
|
|
| |
автор: cheops (из кафе) (18.04.2006 в 12:12) |
|
| |
для: Wita1y
(18.04.2006 в 10:10)
| | | Сейчас под рукой материала нет, поднимите тему вечером - постараюсь подробнее отписаться, если не опередят. | |
| |
|
|
| |
|
|
| |
для: cheops (из кафе)
(18.04.2006 в 12:12)
| | | Поднимаю тему. :-)
Повторюсь еще раз из темы: "Юные умы. Наше будущее! :-)"
>Я понял как из десятичной получить двоичную а уж потом
>вычисления поразрядного оператора (4<<2, 5>>1, 6&5, 6|5, 6^5).
>Я долго мучился и даже немного нервничал, так моё обучение
>тормозилось вот и за этого вопроса... (что из чего идет?).
>Зато когда понял... радости было через край...
>Чем сложнее и тернистей путь, тем слаще и вожделенней победа. :-)))
А кто мне объяснит как этим пользоваться и где нужно его приминять (т.е. желательно)?
~ Поразрядное отрицание (NOT)
|
Всем спасибо | |
| |
|
|
| |
|
|
| |
для: Wita1y
(07.05.2006 в 15:16)
| | | Вообще использование поразрядных операторов в PHP не характерно - их чаще применяют в графике, когда нужно инвертировать цвета или накладывать фильтр на изображение, а также в системном программировании, помоему больше нигде сейчас вручную битами не манипулируют.
Поразрядное отрицание превращает все 0 в 1, т.е. допустим имеется у вас число 345, применяем к нему поразрядное отрицание ~345, получаем -346, вроде никакой логики. Но всё сразу становится понятным, если мы перейдём в двоичную систему исчиления
00000000000000000000000000000000000 00000000000000000000101011001 (345)
11111111111111111111111111111111111 11111111111111111111010100110 (-346)
|
Все нули просто заменяются на 1, а 1 на 0 - вот вам и поразрядное отрицание. | |
| |
|
|