2013-10-24 2 views
0

Я просто пытался создать небольшую программу, но я получаю неожиданный вывод.неожиданный вывод в php при использовании `!`

for($i=20;!$i<20;$i--) 
echo '*'; 

ожидаемый выход *, как только первый случай, когда $i=20 не является ложным, так !$i<20 должен возвращать верно, но не раз цикл, исполняющий равно значению $i.

Я попытался манипулировать значениями и заключил, когда значение $i отрицательно, цикл становится бесконечным.

Далее я попробовал этот

echo 20<20; 

выход был ничего, как и ожидалось тогда

echo !20<20; 

выход был 1, как ожидалось

Теперь, когда он пытался:

19<20 

она возвращается 1, но когда я пытаюсь

!19<20 

она возвращается 1 почему это произошло ?? Я бег PHP на WAMP Server, и мой PHP версии 5.5.0

Примечание: Я не имея никаких проблем с циклом я могу справиться с этим так, пожалуйста, не отвечайте исправления моей петли, а я путать с работой из ! поэтому, пожалуйста, ответьте на это.

+0

http://www.php.net/manual/en/language.operators.precedence.php – CBroe

ответ

1

Вам нужно скобки, чтобы 'не' в правой части:

for($i=20;!($i<20);$i--) 
    echo '*'; 

Пример !20<20 делает это:

!20<20 
!(true)<20 <- converts the type to bool so we can negate 
false<20 <- negates the true to false 
0<20  <- converts the false to an int to compare 
true 

И пример !19<20 делает это:

!19<20 
!(true)<20 <- converts the type to bool so we can negate 
false<20 <- negates the true to false 
0<20  <- converts the false to an int to compare 
true 
+0

Спасибо за такое приятное объяснение, очистил все мои сомнения .. –

0

Пробег:

for($i=20;!($i<20);$i--) 
echo '*'; 

Проблема заключалась в том, что «! $ I» выполнялись сначала, а затем «<» работа оператора.

Смежные вопросы