Вот башорг подкинул разминку для ума:
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";
?>
Чему будет равняться результат в каждом случае?
This entry was posted
on Friday, May 11th, 2007 at 2:21 and is filed under Общее.
You can follow any responses to this entry through the RSS 2.0 feed.
Both comments and pings are currently closed.
В першому випадку все ж тип змінної треба вказати, це ж не PHP
А результати різні — 14 і 13
trovich
May 11th, 2007
Поддерживаю предыдущего оратора. Кстати как раз сегодня ночью до меня дошло, что в PHP то это 13.
sas171
May 11th, 2007
Sorry, missed “int” declaration. Thanx!
dm
May 11th, 2007
У меня вышло 13.
Кстати, у вас в блоге табстопы неверно прописаны – после website идет Verify Email Address
Денис Радченко
May 26th, 2007
Вижу поля так:
dm
May 27th, 2007
А вот мне интересно, в чем фишка? По логике вещей выходит 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
June 10th, 2007
dm, попробуй пройтись по ним, использую клавишу Tab.
Денис Радченко
June 17th, 2007
Прошелся. Ошибку понял, методы борьбы не понял. Буду копать.
dm
June 25th, 2007
int i=3;
cout
Kallisto
July 20th, 2007
alert(‘Мда…’);top.location=’http://blog.club-life.net/’;
Kallisto
July 20th, 2007
Забанить и в спам-рассылкы добавить мыло, а?
dm
July 20th, 2007
У меня тоже на php 13 выходит. А в первом случае где ошибка?
Банить его без толку, да и мыло скорее всего левое оставил.
Flux
July 22nd, 2007
Да нет тут ошибки. C++ имеет более высокий приоритет на инкремент. Вот он и выполняется. Причем значение не возвращается сразу же после операции.
Далее, происходит взятие значения и сложение. А так как инкремент работает с адресом переменной то соответственно она уже == 7.
В РНР же сразу возвращается результат операции. Потому на 1 меньше.
dm
July 22nd, 2007
Ясно. Спасибо.
Flux
July 22nd, 2007