Модераторы: Partizan, gambit
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Операторами ++ и + в одной инструкции, вопрос по последовательность действий 
:(
    Опции темы
Etar
  Дата 21.2.2008, 22:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 60
Регистрация: 21.2.2008

Репутация: 1
Всего: 1



Здравствуйте.
Вот есть такой код:
Код

        int x = 1;
        x = x + ++ x + x; // здесь будет в C# 5, а в С++ будет 6
        Console.WriteLine(x);
        x = 1;
        x = x + x ++ + x; // здесь в C# и в C++ будет 4
        Console.WriteLine(x);

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


x + ++ x + x
сперва должен выполнится оператор ++, так как у него самый высокий приоритет в выражении,
затем остальные операторы слева направо:
x  + 2 + x    // преинкремент увеличивает x на 1 и возвращает увеличенный результат
2 + 2 + x
2 + 2 + 2
= 6 - что и выходит в C++
но в C# выходит 5
выходит, что логика здесь другая, например такая:
сперва извлекается значение из первой переменной x,
затем выполняется оператор ++,
затем извлекается значение из последней переменной x:
1 + ++x + x
1 + 2 + x
1 + 2 + 2
= 5
но тогда как-то странно получается, выходит что существует некая
'операция извлечения значений из переменных', которая имеет одинаковый с постинкрементом приоритет (т.е. самый верхний)  smile 



x + x ++ + x
Здесь же вообще непонятно.
Если по С++ рассуждать, то здесь будет так:
сперва выполнить ++, так как у него самый высокий приоритет среди операторов
затем выполнить остальное слева направо:
x + 1 + x  // постинкремент сперва возвращает текущее значение переменной, затем ее увеличивает
2 + 1 + x
2 + 1 + 2
= 5
но компилятор C++ выдает мне 4, и C# тоже самое
что за ерунда

Объясните пожалуйста!

Спасибо.
PM MAIL   Вверх
PPS05
Дата 21.2.2008, 22:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 262
Регистрация: 6.11.2005
Где: Беларусь, Минск

Репутация: нет
Всего: 7



Где-то на Винграде уже была такая тема...


--------------------
Ушел с форума и не вернулся.
PM MAIL ICQ   Вверх
Real
Дата 22.2.2008, 00:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 507
Регистрация: 9.11.2007

Репутация: 1
Всего: -1



Цитата(PPS05 @ 21.2.2008,  22:14)
Где-то на Винграде уже была такая тема...

Глючит С++



Это сообщение отредактировал(а) Real - 22.2.2008, 00:25
PM   Вверх
Crimp
Дата 22.2.2008, 01:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 47
Регистрация: 21.10.2007
Где: Tula

Репутация: 1
Всего: 2



читать тут http://www.progz.ru/forum/lofiversion/index.php/t32777.html
должно сразу навести на правельные мысли, или гугли ешё

Это сообщение отредактировал(а) Crimp - 22.2.2008, 01:30
PM MAIL ICQ   Вверх
vponomarov
Дата 22.2.2008, 11:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 407
Регистрация: 11.8.2007
Где: Киев

Репутация: 4
Всего: 12



сорри, был не прав:(

Это сообщение отредактировал(а) vponomarov - 22.2.2008, 11:54


--------------------
user posted image
user posted image
PM MAIL ICQ   Вверх
bogys
Дата 22.2.2008, 13:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 16
Регистрация: 25.12.2007

Репутация: нет
Всего: 1



PM MAIL   Вверх
MFSham
Дата 22.2.2008, 16:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 220
Регистрация: 28.8.2005
Где: Беларусь, Гродно

Репутация: нет
Всего: 3



Тема точно такая была. Я тоже раньше задавался точно таким же вопросом smile

upd.
вот еще одна тема

Это сообщение отредактировал(а) MFSham - 22.2.2008, 18:54
--------------------
Без ветра трава неподвижна. Без программ компьютеры бесполезны.
PM MAIL   Вверх
Xenon
Дата 23.2.2008, 02:05 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1529
Регистрация: 12.4.2006

Репутация: 1
Всего: 50



А по-моему это просто UB smile 


--------------------
user posted image  
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
mr.DUDA
THandle

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.
Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :)
Так же не забывайте отмечать свой вопрос решенным, если он таковым является :)


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Общие вопросы по .NET и C# | Следующая тема »


 




[ Время генерации скрипта: 0.0812 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.