Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Вопрос к программистам [8]

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (9): « 1 2 3 4 5 6 7 [8] 9 »   

> Описание: Комбинаторика, алгоритмы и прочее - в программном коде
teddy
Отправлено: 25 Сентября, 2013 - 19:59:13
Post Id


Участник


Покинул форум
Сообщений всего: 1462
Дата рег-ции: Апр. 2013  


Помог: 91 раз(а)




EuGen пишет:
$x = 1;
$y = $x + $x++;
var_dump($y);

В данном случае я думаю сначала выполнится инкремент и значение справа будет равно 2 далее +1 от первого $x(он не увеличится т.к у него нет инкремента и будет равен 1) соответственно 3 получаем именно поэтому. Другой логики не вижу
EuGen пишет:

$x = 1;
@ $y = $x + $x++;
var_dump($y); // int(2)

Здесь я думаю @ сбивает приоритет инкремента поэтому и левая и правая часть выражения будут равны 1 соответственно результат будет равен 2

А насчет
EuGen пишет:
$x = 1;
$y = $x + $x + $x++;
var_dump($y);

тут наверное своя хитрость зарытая глубоко в мануале(думаю, что то связано с определенным количеством слогаемых или их значений)

Пока всё... тепло? холодно? Улыбка
 
 Top
EuGen Администратор
Отправлено: 25 Сентября, 2013 - 20:14:52
Post Id


Профессионал


Покинул форум
Сообщений всего: 9095
Дата рег-ции: Июнь 2007  
Откуда: Berlin


Помог: 707 раз(а)




teddy
Все варианты, которые Вы назвали, уж были ранее предложены, но ни один из них не является даже близким к верному ответу.


-----
Есть в мире две бесконечные вещи - это Вселенная и человеческая глупость. Но насчет первой .. я не уверен.
 
 Top
SAD
Отправлено: 25 Сентября, 2013 - 20:42:36
Post Id



Постоянный участник


Покинул форум
Сообщений всего: 2508
Дата рег-ции: Май 2009  
Откуда: Днепропетровск, Украина


Помог: 75 раз(а)




я не усну, если сегодня не узнаю ответ
 
 Top
caballero
Отправлено: 25 Сентября, 2013 - 21:33:05
Post Id


Активный участник


Покинул форум
Сообщений всего: 5998
Дата рег-ции: Сент. 2011  
Откуда: Харьков


Помог: 126 раз(а)




в первом случае складываются два числа в ячейку памяти первого
потом оно инкрементится
получаем 3

во втором случае ячейка памяти другая после первых двух операндов и инкрементится старая
ячейка после того как уже выполнено сложение

как то так

кстати с собакой не вижу разницы - то же самое 3


-----
Бесплатная система складского учета с открытым кодом https://zippy[dot]com[dot]ua/zstore
 
 Top
EuGen Администратор
Отправлено: 25 Сентября, 2013 - 21:38:18
Post Id


Профессионал


Покинул форум
Сообщений всего: 9095
Дата рег-ции: Июнь 2007  
Откуда: Berlin


Помог: 707 раз(а)




caballero
Нет. Всё так же далеко от истины. С "@" разница есть.


-----
Есть в мире две бесконечные вещи - это Вселенная и человеческая глупость. Но насчет первой .. я не уверен.
 
 Top
caballero
Отправлено: 25 Сентября, 2013 - 21:38:28
Post Id


Активный участник


Покинул форум
Сообщений всего: 5998
Дата рег-ции: Сент. 2011  
Откуда: Харьков


Помог: 126 раз(а)




теоретически должна быть возможность декомпильнуть байт код в асемблеорный код
оно бы сразу прояснилось

не знаю только как байт код выловить
(Добавление)
кстати по поводу ваших тем о расширении функционала

чем больше фич в языке тем сложнее его граматика
а как следствие больше вероятность ее неодноэначности.
особенно в скриптовых языках.
Это к тому что лучше не пихать то что реально не востребовано

думаю данный пример связан с косяками в описании граматики
(Добавление)

вот так дает 2, что интересно
а еще интереснее что дебагер PHPEditor когда выделяешь выражение показывает 4 как и положено

(Отредактировано автором: 25 Сентября, 2013 - 21:53:36)



-----
Бесплатная система складского учета с открытым кодом https://zippy[dot]com[dot]ua/zstore
 
 Top
Medallion
Отправлено: 25 Сентября, 2013 - 21:47:27
Post Id



Частый гость


Покинул форум
Сообщений всего: 253
Дата рег-ции: Май 2012  
Откуда: Херсон, Украина


Помог: 7 раз(а)




EuGen пишет:
Поясните, почему в PHP следующие две программы дадут одинаковый результат (3) :
PHP:
скопировать код в буфер обмена
$x = 1;
$y = $x + $x++;
var_dump($y);

и
PHP:
скопировать код в буфер обмена
$x = 1;
$y = $x + $x + $x++;
var_dump($y);


Мало знаний PHP, но что-то подсказывает, что у интрепертатора Php в отношении инкремента, есть свой внутренний счетчик. Это объясняется тем, что если одну и ту же переменную добавить к ней же, инкремент ++ в данном примере не сработает, т.к. интрепертатор видит, что переменная инкрементировалась.
А @ подавляет видимость интрепертатора.

Строго не судите, это мое такое логическое мышление! Улыбка
 
 Top
EuGen Администратор
Отправлено: 25 Сентября, 2013 - 21:51:22
Post Id


Профессионал


Покинул форум
Сообщений всего: 9095
Дата рег-ции: Июнь 2007  
Откуда: Berlin


Помог: 707 раз(а)




Medallion
PHP не устроен так, как Вы описали. Ответ на вопрос состоит совсем в другом.


-----
Есть в мире две бесконечные вещи - это Вселенная и человеческая глупость. Но насчет первой .. я не уверен.
 
 Top
Medallion
Отправлено: 25 Сентября, 2013 - 23:17:14
Post Id



Частый гость


Покинул форум
Сообщений всего: 253
Дата рег-ции: Май 2012  
Откуда: Херсон, Украина


Помог: 7 раз(а)




Почитал немного документации, и появилась мысля по поводу задачи.
В первом выражении:
$x = 1;
$y = $x + $x++;
var_dump($y);

Т.к. приоритет операторов определяется исходя из их ассоциативности, то в первую очередь выполнится инкремент $x++, а потом добавится единица, в этом случае на выходе 3.

Во-втором выражении:
$x = 1;
$y = $x + $x + $x++;
var_dump($y);

Больший приоритет будет иметь, выражение сложения, т.е. сначала выполнится
$x + $x + $x, а потом переменная $x увеличится на 1, т.к. постфиксный инкремент возвращает значение $x, затем увеличивает $x на единицу.
В этом случае на выходе тоже 3.

Значение @ в выражении, в подавлении ассоциативности (порядку их выполнения).
 
 Top
EuGen Администратор
Отправлено: 25 Сентября, 2013 - 23:31:58
Post Id


Профессионал


Покинул форум
Сообщений всего: 9095
Дата рег-ции: Июнь 2007  
Откуда: Berlin


Помог: 707 раз(а)




Нет (далее, чтобы не превращать задачу в отгадывание, буду комментировать лишь верные мысли)


-----
Есть в мире две бесконечные вещи - это Вселенная и человеческая глупость. Но насчет первой .. я не уверен.
 
 Top
Medallion
Отправлено: 26 Сентября, 2013 - 01:11:03
Post Id



Частый гость


Покинул форум
Сообщений всего: 253
Дата рег-ции: Май 2012  
Откуда: Херсон, Украина


Помог: 7 раз(а)




Перегрузка постинкремента Растерялся
 
 Top
armancho7777777 Супермодератор
Отправлено: 26 Сентября, 2013 - 03:59:30
Post Id



Активный участник


Покинул форум
Сообщений всего: 4526
Дата рег-ции: Февр. 2011  
Откуда: Москва


Помог: 221 раз(а)




armancho7777777 пишет:
ответить попробую

Нет, не отвечу.
EuGen, если кто и мог ответить у нас на форуме на такой спецефичный вопрос, то только caballero.
Так что можно уже выкладывать ответ Подмигивание
 
 Top
ALEN Модератор
Отправлено: 26 Сентября, 2013 - 08:57:33
Post Id



Участник


Покинул форум
Сообщений всего: 1459
Дата рег-ции: Авг. 2008  
Откуда: Крым


Помог: 11 раз(а)




Если разобрать, то что было написано глазами PHP:


выглядит, как:


Если бы запись имела не Post-increment, а pre-increment - значение было бы равно int(4) в связи с большим приоритетом. А в данном случае Post-increment имеет меньший приоритет нежели выражение.


аналогичен записи:
 
 Top
LIME
Отправлено: 26 Сентября, 2013 - 09:00:07
Post Id


Активный участник


Покинул форум
Сообщений всего: 10732
Дата рег-ции: Нояб. 2010  


Помог: 322 раз(а)




ALEN разве у постфиксного и префиксного инкремента/декремента не одинаковый приоритет?
(Добавление)
в таком случае $y=$x+$x; $x++
 
 Top
imya
Отправлено: 26 Сентября, 2013 - 09:04:08
Post Id



Участник


Покинул форум
Сообщений всего: 1472
Дата рег-ции: Сент. 2012  
Откуда: Запорожье, Украина


Помог: 19 раз(а)




Сижу и жду ответа... Улыбка


-----
PHP:
скопировать код в буфер обмена
  1. do {box != cat;} while (cat != box);


Когда нормальный человек, уезжая из дома одевает на жену пояс верности, веб-дизайнер ставит на нее счетчик...
 
My status
 Top
Страниц (9): « 1 2 3 4 5 6 7 [8] 9 »
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Прочее »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB