ПашаV
Новичок
В одном из вопросов в тесте Zend PHP5.3 встретился такой вопрос, хоть убейте не понимаю как формируется ответ:
What is the output code?
Тут невооруженным взглядом видно, что обе части не равны, т.к. скобки дают различный приоритет операциям (побитовое И и сложение), я мыслил так:
5 = 0101
6 = 0110
7 = 0111
1) Вычисляем выражение 1 (5&6+1):
Далее 4 + 1 = 5
2) Вычисляем выражение 2 (5&(6+1)):
6+1 = 7
Из чего я решаю изменить своё решение и ставлю первый вариант: Успех.
Но следом за этим вопросом идет другой, аналогичный но с другими цифрами, а именно "+1" меняется на "+2", ну я с дуру отвечаю также (радуясь что система тестирования случайно дала дважды аналогичный вопрос), но потом решаю пересчитать, и получаю следующее:
1) Вычисляю 5&6+2:
4 + 2 = 6
2) Вычисляю 5&(6+2):
6+2 = 8 (1000)
Т.е. Выражения 5&6+2 и 5&(6+2) НЕ РАВНЫ!!!!
Но если бы загвоздка заключалась именно в этом, на самом деле они равны, т.к. если запустить в PHP этот код:
мы в обоих случаях получаем 0 (ноль), причем когда я стал вникать в это написал следующий небольшой код демонсттирующий расчеты:
и вот результат кода:
После чего мой мозг окончательно умер, когда я стал разбираться почему
5&6+4 тоже самое что и 5&6+10, сначала я думал что всё дело в четности или нечетности прибавляемого $i, но 5&6+6 = 4, т.е. и тут непонятно.
У кого нибудь есть идеи что это вообще такая за арифметика в PHP и есть ли этому нормальное объяснение, т.к. на php.net/manual/ru - я ничего не могу найти по этой теме, равно как и в Гугле и других системах.
Заранее спасибо!
What is the output code?
PHP:
<?php
if ( (5&6+1) == (5&(6+1)) ) {
echo 'Успех';
} else {
echo 'Провал';
}
?>
5 = 0101
6 = 0110
7 = 0111
1) Вычисляем выражение 1 (5&6+1):
PHP:
0101 = 5
0110 = 6
=
0100 = 4
2) Вычисляем выражение 2 (5&(6+1)):
6+1 = 7
PHP:
0101 = 5
0111 = 7
=
0101 = 5
Но следом за этим вопросом идет другой, аналогичный но с другими цифрами, а именно "+1" меняется на "+2", ну я с дуру отвечаю также (радуясь что система тестирования случайно дала дважды аналогичный вопрос), но потом решаю пересчитать, и получаю следующее:
1) Вычисляю 5&6+2:
PHP:
0101 = 5
0110 = 6
=
0100 = 4
2) Вычисляю 5&(6+2):
6+2 = 8 (1000)
PHP:
0101 = 5
1000 = 8
=
0
Но если бы загвоздка заключалась именно в этом, на самом деле они равны, т.к. если запустить в PHP этот код:
PHP:
<?
echo 5&6+2;
echo 5&(6+2);
?>
PHP:
<?
for ($i = 0; $i <= 20; $i++) {
echo '' . (5&6+$i) . ' = ' . (5&(6+$i)) . '<br>';
}
?>
PHP:
4 = 4
5 = 5
0 = 0
1 = 1
0 = 0
1 = 1
4 = 4
5 = 5
4 = 4
5 = 5
0 = 0
1 = 1
0 = 0
1 = 1
4 = 4
5 = 5
4 = 4
5 = 5
0 = 0
1 = 1
0 = 0
5&6+4 тоже самое что и 5&6+10, сначала я думал что всё дело в четности или нечетности прибавляемого $i, но 5&6+6 = 4, т.е. и тут непонятно.
У кого нибудь есть идеи что это вообще такая за арифметика в PHP и есть ли этому нормальное объяснение, т.к. на php.net/manual/ru - я ничего не могу найти по этой теме, равно как и в Гугле и других системах.
Заранее спасибо!