![]() |
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? -------------------- Все содержимое данного сообщения (кроме цитат) является моим личным скромным мнением и на статус истины в высшей инстанции не претендует.
На вопросы по программированию, физике, математике и т.д. в аське и личке не отвечаю. Даже "один-единственный раз" в виде исключения! |
![]() ![]() |
мисс_граффити |
![]()
Сообщение
#2
|
![]() просто человек ![]() ![]() ![]() ![]() ![]() ![]() Группа: Модераторы Сообщений: 3 641 Пол: Женский Реальное имя: Юлия Репутация: ![]() ![]() ![]() |
нашла статейку по этому поводу, разобралась окончательно.
спасибо большое! -------------------- Все содержимое данного сообщения (кроме цитат) является моим личным скромным мнением и на статус истины в высшей инстанции не претендует.
На вопросы по программированию, физике, математике и т.д. в аське и личке не отвечаю. Даже "один-единственный раз" в виде исключения! |
hardcase |
![]()
Сообщение
#3
|
![]() code warrior ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 484 Пол: Мужской Реальное имя: Славен Репутация: ![]() ![]() ![]() |
нашла статейку по этому поводу, разобралась окончательно. спасибо большое! Темка устарела, но в догонку оставлю пост. Вот результат дизассемблирования строки i = ++i + ++i (BDS2006, без какой либо оптимизации) Код Unit1.c.12: i = ++i + ++i; 0040117B FF45FC inc dword ptr [ebp-$04] 0040117E FF45FC inc dword ptr [ebp-$04] 00401181 8B45FC mov eax,[ebp-$04] 00401184 0145FC add [ebp-$04],eax Видно,что сперва компилер выполнил ++i 2 раза, потом сложил и результат поместил снова в i. В результате получаем 14. Для Vs2005 можно увидеть такой код (без оптимизации) Код i = ++i + ++i; 00401BFD mov eax,dword ptr [i] 00401C00 add eax,1 00401C03 mov dword ptr [i],eax 00401C06 mov ecx,dword ptr [i] 00401C09 add ecx,1 00401C0C mov dword ptr [i],ecx 00401C0F mov edx,dword ptr [i] 00401C12 add edx,dword ptr [i] 00401C15 mov dword ptr [i],edx с оптимизацией всю кухную компилер заменил на инструкцию lea, i находится в eax Код i = ++i + ++i; 00401019 lea eax,[eax+eax+4] в обоих случаях получаем 14 Для C# в той же Vs2005 получим 13, вот листинг дизассемблирования: Код int i = 5; 00000027 mov esi,5 i = ++i + ++i; 0000002c inc esi 0000002d mov edi,esi 0000002f inc esi 00000030 add esi,edi Сообщение отредактировано: hardcase - 6.08.2007 18:41 -------------------- ИзВ ин ИтЕ зА нЕ рОв НЫй П оч ЕРк
|
![]() ![]() |
![]() |
Текстовая версия | 20.06.2025 16:29 |