Fork me on GitHub

The WebDevil

Enjoy development

Вот башорг подкинул разминку для ума:
C++:

#include < stdio.h >
int main(void) {
  int i=5;
  i = ++i + ++i;
  printf("\n%d\n",i);
  return 0;
}

и, соответственно, на PHP:

<?php
  $i=5;
  $i = ++$i + ++$i;
  echo "\n$i\n";
?>

Чему будет равняться результат в каждом случае?

14 Responses to “Quest”

  1. В першому випадку все ж тип змінної треба вказати, це ж не PHP :)

    А результати різні — 14 і 13

    trovich

  2. Поддерживаю предыдущего оратора. Кстати как раз сегодня ночью до меня дошло, что в PHP то это 13.

    sas171

  3. Sorry, missed “int” declaration. Thanx!

    dm

  4. У меня вышло 13.
    Кстати, у вас в блоге табстопы неверно прописаны – после website идет Verify Email Address

    Денис Радченко

  5. Вижу поля так:

    name (required)
    email ( will not be shown ) (required)
    Verify Email Address (required)
    website

    dm

  6. А вот мне интересно, в чем фишка? По логике вещей выходит 13, что и наблюдается в РНР. Тогда почему в C++ это 14?

    Ведь пример рассчитывается так: 4:(i = 3:(1:(++i) + 2:(++i))), т.е. так:
    i = ++i + ++i; //i = 5
    i = 6 + ++i; //i = 6
    i = 6 + 7; //i = 7
    i = 13; //i = 13

    А, кажется понял. C++ сначала выполняет обе операции инкремента, а уже потом устанавливает в пример обе 7.

    Alexander

  7. dm, попробуй пройтись по ним, использую клавишу Tab.

    Денис Радченко

  8. Прошелся. Ошибку понял, методы борьбы не понял. Буду копать.

    dm

  9. int i=3;
    cout

    Kallisto

  10. alert(‘Мда…’);top.location=’http://blog.club-life.net/’;

    Kallisto

  11. Забанить и в спам-рассылкы добавить мыло, а? ;)

    dm

  12. У меня тоже на php 13 выходит. А в первом случае где ошибка?

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

    Flux

  13. Да нет тут ошибки. C++ имеет более высокий приоритет на инкремент. Вот он и выполняется. Причем значение не возвращается сразу же после операции.
    Далее, происходит взятие значения и сложение. А так как инкремент работает с адресом переменной то соответственно она уже == 7.

    В РНР же сразу возвращается результат операции. Потому на 1 меньше.

    dm

  14. Ясно. Спасибо.

    Flux