Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » префиксный инкремент С

Ответить
Настройки темы
префиксный инкремент С

Ветеран


Сообщения: 1404
Благодарности: 135

Профиль | Отправить PM | Цитировать


Код: Выделить весь код
#include <stdio.h>

void main(){
int x,y;
x=1;
y=0;
y = ++x + ++x ;
printf("Y-%d ,  X-%d\n",y,x);
}
Я рассуждаю так:
в выражении y = ++x + ++x ;
после первого ++x x становится равным 2 и прибавляется к У, равному 0, таким образом y=0+2=2
после второго ++x x становится равным 3 и прибавляется к Y, равному 2,
таким образом y=2+3=5

Однако после выполнения программа выдает что Y=6
Почему?
Где ошибка в моих рассуждениях?

Отправлено: 14:38, 10-01-2005

 

Новый участник


Сообщения: 3
Благодарности: 0

Профиль | Отправить PM | Цитировать


Программа же транслируется на ассемблер. А там уже на низком уровне Optimizing Compiler находит способ экономить ячейки. Если компилить без оптимезации результат вполне может измениться.

Отправлено: 08:19, 11-01-2005 | #11



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

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


Ветеран


Сообщения: 1404
Благодарности: 135

Профиль | Отправить PM | Цитировать


>>Программа же транслируется на ассемблер.

Программа транслируется в машинные коды, то есть инструкции процессора, а ассемблер и машинные коды - это на мой взгляд не одно и то же.

-------
Ehhh.. what's up, doc?..


Отправлено: 10:31, 11-01-2005 | #12


Аватара для hasherfrog

Старый параноик


Сообщения: 2423
Благодарности: 85

Профиль | Отправить PM | Цитировать


Изобретаем велосипед. 100% это уже было, м/б даже на этом форуме

В детали ассемблер-коды предлагаю не лезть, это всего лишь детали.
Принцип понятен, думаю, и без этого? В одном случае компилятор сразу делает инкременты х, потом действия.
В другом - по очереди, слева направо, по ходу инкрементируя х.
Соответственно, мы приходим к тому самому выводу :

Цитата:
СТАНДАРТОМ С++ ЭТИ ПРАВИЛА НЕ РЕГЛАМЕНТИРУЮТСЯ
Всем спасибо, все свободны.

PS. Только оптимизация идёт не на этапе ассм->коды, а С->ассм.

Отправлено: 11:07, 11-01-2005 | #13



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » префиксный инкремент С

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено




 
Переход