![]() |
1. Пользуйтесь тегами кода. - [code] ... [/code]
2. Точно указывайте язык, название и версию компилятора (интерпретатора).
3. Название темы должно быть информативным.
В описании темы указываем язык!!!
![]() |
мисс_граффити |
![]()
Сообщение
#1
|
![]() просто человек ![]() ![]() ![]() ![]() ![]() ![]() Группа: Модераторы Сообщений: 3 641 Пол: Женский Реальное имя: Юлия Репутация: ![]() ![]() ![]() |
здравствуйте...
есть небольшой кусочек кода: int i=5; java считает, что получается 13 (я с ней согласна... 0) ++i равно 6 1) ++i равно 7 2) 6+7=13) а вот с++ (пользуюсь с++ builder 5) уверен, что 14. вопрос: это фишка языка или компилятора (то есть что получится при использовании другого с++-ного компилятора)? и откуда, все же, берется 14? -------------------- Все содержимое данного сообщения (кроме цитат) является моим личным скромным мнением и на статус истины в высшей инстанции не претендует.
На вопросы по программированию, физике, математике и т.д. в аське и личке не отвечаю. Даже "один-единственный раз" в виде исключения! |
![]() ![]() |
Neznaika |
![]()
Сообщение
#2
|
Пионер ![]() ![]() Группа: Пользователи Сообщений: 51 Пол: Мужской Репутация: ![]() ![]() ![]() |
i = ++i + ++i;
Оператор ++ используется только с ПЕРЕМЕННОЙ и производит ДВА результата: 1) сначала на 1 увеличивается i; 2) результат (++i) равен первоначальному значению i плюс 1. Следовательно исходный оператор можно разделить на 3: temp1 = ++i; temp2 = ++i; i = temp1 + temp2; В каком порядке вычисляются temp1 и temp2 не имеет значения, поэтому, если сначала i = 5, то после (i = ++i + ++i) i должно быть равно 13. Правая часть вычисляется независимо от левой. I увеличивается на 1 всего два раза и далее в последней операции сложения не участвует. Откуда BDS2006 и VS2005 получают 14??? Справа два (++i) зависят друг от друга, но левое i... Это же всего лишь приёмник. Разве не так? Цитата inc dword ptr [ebp-$04] inc dword ptr [ebp-$04] mov eax,[ebp-$04] ; eax = temp2 temp1 потерян. add [ebp-$04],eax ; i = temp2 + temp2 Цитата eax,dword ptr [i] add eax,1 mov dword ptr [i],eax ; i = temp1 mov ecx,dword ptr [i] add ecx,1 mov dword ptr [i],ecx ; i = temp2 mov edx,dword ptr [i] add edx,dword ptr [i] mov dword ptr [i],edx ; i = temp2 + temp2 ??? Теперь понятно, почему эти уроды у меня не живут. |
![]() ![]() |
![]() |
Текстовая версия | 16.08.2025 2:40 |