Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / C++ [игнор отключен] [закрыт для гостей] / ++i + ++i / 25 сообщений из 42, страница 1 из 2
11.05.2007, 10:59
    #34518328
Александр Гoлдун
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
++i + ++i
Имеется код:
Код: plaintext
1.
2.
int i =  5 ;
i = ++i + ++i;

Чему будет равно i в результате?
...
Рейтинг: 0 / 0
11.05.2007, 11:05
    #34518361
TopSpace
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
++i + ++i
В с++ 14)) В c# 13
...
Рейтинг: 0 / 0
11.05.2007, 11:07
    #34518369
Александр Гoлдун
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
++i + ++i
TopSpaceВ с++ 14
Но почему 14???????
...
Рейтинг: 0 / 0
11.05.2007, 11:10
    #34518380
Akh
Akh
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
++i + ++i
Александр Гoлдун TopSpaceВ с++ 14
Но почему 14???????

Сначала прединкременты, потом сложение.

Эта тема подробно разбиралась, где-то пол года назад.
...
Рейтинг: 0 / 0
11.05.2007, 11:11
    #34518388
Александр Гoлдун
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
++i + ++i
Ну хорошо, чуть усложним вариант:
Код: plaintext
1.
2.
3.
int i =  5 ;
int a,b;
i = (a=++i)+(b=--i);
Чему должно быть равно a и b?
...
Рейтинг: 0 / 0
11.05.2007, 11:25
    #34518452
Akh
Akh
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
++i + ++i
Александр ГoлдунНу хорошо, чуть усложним вариант:
Код: plaintext
1.
2.
3.
int i =  5 ;
int a,b;
i = (a=++i)+(b=--i);
Чему должно быть равно a и b?

С какой целью вы интересуетесь?
...
Рейтинг: 0 / 0
11.05.2007, 11:26
    #34518458
TopSpace
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
++i + ++i
Код: plaintext
1.
2.
3.
int i =  5 ;
int a,b;
i = (a=++i)+(b=--i);
Не проверяя, думаю i=9
14 из-за того, что после инкрементов правый операнд сложения - область памяти обозначенная как переменная i. Которая претерпела 2 инкремента. Т.е. не создается временный объект под результат (хотя было бы логичней, в .net создается)
...
Рейтинг: 0 / 0
11.05.2007, 11:28
    #34518466
Александр Гoлдун
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
++i + ++i
Akh Александр ГoлдунНу хорошо, чуть усложним вариант:
Код: plaintext
1.
2.
3.
int i =  5 ;
int a,b;
i = (a=++i)+(b=--i);
Чему должно быть равно a и b?

С какой целью вы интересуетесь?
Да в общем-то ни с какой. Давно уже не брал в руки С++, хотя когда-то весьма активно его использовал. И тут спросили по ICQ. С ходу ответил одно, скомпилял, проверил - получил другое. Смутило.
...
Рейтинг: 0 / 0
11.05.2007, 11:30
    #34518478
Akh
Akh
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
++i + ++i
TopSpace
Код: plaintext
1.
2.
3.
int i =  5 ;
int a,b;
i = (a=++i)+(b=--i);
Не проверяя, думаю i=9
14 из-за того, что после инкрементов правый операнд сложения - область памяти обозначенная как переменная i. Которая претерпела 2 инкремента. Т.е. не создается временный объект под результат (хотя было бы логичней, в .net создается)


Проверил == 11.

У меня логика не основывается на областях памяти:

Скобки самые приоритетные, поэтому инкременты разделились во времени. Получилось 6+5.
...
Рейтинг: 0 / 0
11.05.2007, 11:30
    #34518479
Александр Гoлдун
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
++i + ++i
TopSpace
Код: plaintext
1.
2.
3.
int i =  5 ;
int a,b;
i = (a=++i)+(b=--i);
Не проверяя, думаю i=9

10. При этом a=5, b=5 получилось.
C++ Builder 6
...
Рейтинг: 0 / 0
11.05.2007, 11:33
    #34518492
Akh
Akh
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
++i + ++i
Александр Гoлдун Akh Александр ГoлдунНу хорошо, чуть усложним вариант:
Код: plaintext
1.
2.
3.
int i =  5 ;
int a,b;
i = (a=++i)+(b=--i);
Чему должно быть равно a и b?

С какой целью вы интересуетесь?
Да в общем-то ни с какой. Давно уже не брал в руки С++, хотя когда-то весьма активно его использовал. И тут спросили по ICQ. С ходу ответил одно, скомпилял, проверил - получил другое. Смутило.

Если интересна тема, то можете поискать эту ветку. Даже разбирали asm для выяснения обстаятельств. В чем-то даже разобрались.

Но эта тонкая материя, нет необходимости заморачиваться по этому поводу.
...
Рейтинг: 0 / 0
11.05.2007, 11:39
    #34518517
TopSpace
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
++i + ++i
Akh
Скобки самые приоритетные, поэтому инкременты разделились во времени. Получилось 6+5.

так а почему 5?
...
Рейтинг: 0 / 0
11.05.2007, 11:41
    #34518530
Akh
Akh
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
++i + ++i
TopSpace Akh
Скобки самые приоритетные, поэтому инкременты разделились во времени. Получилось 6+5.

так а почему 5?

Потом декремент вернул i значение 5-ти:
Код: plaintext
1.
2.
3.
i =  5 ;
++i =  6 ; //a
--i =  5 ; //b
        11 
...
Рейтинг: 0 / 0
11.05.2007, 11:43
    #34518541
Александр Гoлдун
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
++i + ++i
Akh TopSpace
Код: plaintext
1.
2.
3.
int i =  5 ;
int a,b;
i = (a=++i)+(b=--i);
Не проверяя, думаю i=9
14 из-за того, что после инкрементов правый операнд сложения - область памяти обозначенная как переменная i. Которая претерпела 2 инкремента. Т.е. не создается временный объект под результат (хотя было бы логичней, в .net создается)


Проверил == 11.

У меня логика не основывается на областях памяти:

Скобки самые приоритетные, поэтому инкременты разделились во времени. Получилось 6+5.
В каком компиляторе? C++Builder 6 выдал i=10, a=5, b=5
...
Рейтинг: 0 / 0
11.05.2007, 11:47
    #34518548
TopSpace
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
++i + ++i
Akh TopSpace Akh
Скобки самые приоритетные, поэтому инкременты разделились во времени. Получилось 6+5.

так а почему 5?

Потом декремент вернул i значение 5-ти:
Код: plaintext
1.
2.
3.
i =  5 ;
++i =  6 ; //a
--i =  5 ; //b
        11 


Разве приоритет не справа на лево (например сцепки операторов <<)??
Тогда
Код: plaintext
1.
2.
3.
i =  5 ;
--i =  4 ; //b
++i =  5 ; //a
 9 
...
Рейтинг: 0 / 0
11.05.2007, 11:48
    #34518550
батрачище
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
++i + ++i
TopSpaceВ с++ 14)) В c# 13

а почему в С# 13 ???
...
Рейтинг: 0 / 0
11.05.2007, 11:49
    #34518556
Akh
Akh
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
++i + ++i
Александр Гoлдун Akh TopSpace
Код: plaintext
1.
2.
3.
int i =  5 ;
int a,b;
i = (a=++i)+(b=--i);
Не проверяя, думаю i=9
14 из-за того, что после инкрементов правый операнд сложения - область памяти обозначенная как переменная i. Которая претерпела 2 инкремента. Т.е. не создается временный объект под результат (хотя было бы логичней, в .net создается)


Проверил == 11.

У меня логика не основывается на областях памяти:

Скобки самые приоритетные, поэтому инкременты разделились во времени. Получилось 6+5.
В каком компиляторе? C++Builder 6 выдал i=10, a=5, b=5

gcc
...
Рейтинг: 0 / 0
11.05.2007, 11:53
    #34518567
TopSpace
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
++i + ++i
батрачище TopSpaceВ с++ 14)) В c# 13

а почему в С# 13 ???
Потому что при вычислении ++i создается новый объект, который при втором ++i не трогается, и участвует в сложении.
...
Рейтинг: 0 / 0
11.05.2007, 11:53
    #34518568
Александр Гoлдун
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
++i + ++i
Akh

Если интересна тема, то можете поискать эту ветку. Даже разбирали asm для выяснения обстаятельств. В чем-то даже разобрались.

Тема любопытна. Я догадывался, что это, возможно, обсуждалось, и может не один раз. Но найти не удалось. Ключевые слова не подскажете?
Akh
Но эта тонкая материя, нет необходимости заморачиваться по этому поводу.
В принципе да. За такой код в продакшн надо гнать в шею. Сомневаешься - упрости.
...
Рейтинг: 0 / 0
11.05.2007, 11:54
    #34518574
батрачище
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
++i + ++i
TopSpace батрачище TopSpaceВ с++ 14)) В c# 13

а почему в С# 13 ???
Потому что при вычислении ++i создается новый объект, который при втором ++i не трогается, и участвует в сложении.

какой гемор!..
...
Рейтинг: 0 / 0
11.05.2007, 11:55
    #34518581
Akh
Akh
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
++i + ++i
TopSpace[quot Akh]
Разве приоритет не справа на лево (например сцепки операторов <<)??
Тогда
Код: plaintext
1.
2.
3.
i =  5 ;
--i =  4 ; //b
++i =  5 ; //a
 9 


Может и справа налево. Тогда логика какая-то другая.

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

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

Так что, к изучению с/с++, это исследование не имеет ни какого отношения.
...
Рейтинг: 0 / 0
11.05.2007, 11:56
    #34518587
батрачище
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
++i + ++i
a
Код: plaintext
1.
int i =  5 ;
i = i++ + i++;
чему в C# будет i равно ?
...
Рейтинг: 0 / 0
11.05.2007, 12:03
    #34518621
Akh
Akh
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
++i + ++i
Александр ГoлдунТема любопытна. Я догадывался, что это, возможно, обсуждалось, и может не один раз. Но найти не удалось. Ключевые слова не подскажете?


++i или i++?
Префиксные операции и стандарт
...
Рейтинг: 0 / 0
11.05.2007, 12:27
    #34518725
TopSpace
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
++i + ++i
батрачищеa
Код: plaintext
1.
int i =  5 ;
i = i++ + i++;
чему в C# будет i равно ?

Код: plaintext
1.
2.
3.
4.
int i =  5 ;
i = i++ + i++;
MessageBox.Show( i.ToString() );
//11
Гм.. понимайте как хотите:))
...
Рейтинг: 0 / 0
11.05.2007, 12:54
    #34518829
Pavel Kilevatyh
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
++i + ++i
http://bash.org.ru/quote.php?num=212679
...
Рейтинг: 0 / 0
Форумы / C++ [игнор отключен] [закрыт для гостей] / ++i + ++i / 25 сообщений из 42, страница 1 из 2
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]