(Untitled)

Jun 18, 2009 15:02

Интересное наблюдение.

int i = 5;
i = ++i + ++i;

Если запустить эту программу на C или Perl, то получим ответ 14. А если на Java или PHP - то 13.

Leave a comment

Comments 11

neponyatka June 18 2009, 12:44:53 UTC
++i это i+2 ?

Reply

sevka June 18 2009, 13:02:10 UTC
Не. ++i - это прибавить к i единицу перед тем, как выполнить действие с ним, ну т.е. i увеличивается на единицу, а потом уже над ним выполняются какие-либо действия, в данном случае сложение с ++i. Как-то так.

Reply

neponyatka June 18 2009, 13:04:52 UTC
то есть ++i это 6, затем плюс ++i(=7 теперь уже), и сумма =13
да?

Reply

sevka June 18 2009, 13:21:32 UTC
Ну мне тоже так кажется.
Единственное объяснение ответа 14 я нахожу такое:

Увеличиваем i на один, потом еще раз увеличиваем i на один. Значит после этого i = 7. И потом складываем i с i. Получаем 14.

Reply


trulala June 18 2009, 18:17:30 UTC
Сразу видно, кто как обращается с памятью :-)

Reply

sevka June 19 2009, 09:13:30 UTC
т.е. Жаба с ПХП для каждого слагаемого выделяют отдельный участок памяти? А Си экономно складывает i само с собой?

Reply

trulala June 19 2009, 11:49:18 UTC
Похоже на то.

Reply

curlymurly August 9 2009, 20:25:46 UTC
это известная закавыка, когда-то уже сталкивался, а результат кстати может быть разным даже в рамках одного языка программирования, и 12 тоже. помнится кто-то даже язык "брейнфак" написал, имеющий внешнее сходство с этой задачкой.

Reply


Leave a comment

Up