"++i" - сначала нарастить, потом использовать
"i++" - сначала использовать, потом нарастить
"if ((++i)==10)" и "i++, if (i==10)" - одинаковы по сути, но могут отличаться по скорости в зависимости от компилятора и оптимизатора.
А предлагаемые
"if ((i++)==10)" и "i++, if (i==10)" - вообще разную логику реализуют. В одном сравнивается до наращивания, а в другом после. и многое зависит от того используется ли это i в дальнейшем. Оптимизатор может инкремент в первом вообще выкинуть, если i потом не используется.
Другие языки программирования и технологии
Вопрос по Си. if ((i++)==10) и i++ if (i==10) будет ли первый пример работать быстрее чем второй?
все зависит от компилятора, но в итоге если и будет разница в 2-4 цикла, это ни очем.
Операции одинаковые, хоть и в разном порядке, так что скорость будет, скорее всего, одинаковая. Но вообще зависит от оптимизатора.
А вообще - в чем проблема? Загоните в цикл и рассчитайте, за сколько 1000000 раз выполнится...
А вообще - в чем проблема? Загоните в цикл и рассчитайте, за сколько 1000000 раз выполнится...
не будет. но работать они будут по разному. В первом случае, сравнение будет происходить до инкремента, а во втором - после :) (если я правильно помню конечно, сам на delphi пишу, там таких конструкций нету)
Sergey Nemiroff
По вашему вызов переменной не занимает никакого времени?
Проверьте это программно.
Ассемблерный код идентичен. Скорость одинакова.
Все врут, а "Бахарев" и "капитан гугл" врут особенно яростно.
Если компилятор оптимизирует - то второй код может работать быстрее (там i++ может быть оптимизировано до ++i). Оптимизация возможна, т. к. во втором примере значение, возвращаемое i++ не используется.
Но это как сравнивать скорость закипания воды в чайнике и скорость велосипеда ) - код разный - "Матвейчук" правду говорит - в первом случае сравнение выполняется над копией переменной i (созданной при инкременте и имеющей старое значение - то, которое было у i до инкремента) , во втором - непосредственно над i подсле инкремента.
Если компилятор оптимизирует - то второй код может работать быстрее (там i++ может быть оптимизировано до ++i). Оптимизация возможна, т. к. во втором примере значение, возвращаемое i++ не используется.
Но это как сравнивать скорость закипания воды в чайнике и скорость велосипеда ) - код разный - "Матвейчук" правду говорит - в первом случае сравнение выполняется над копией переменной i (созданной при инкременте и имеющей старое значение - то, которое было у i до инкремента) , во втором - непосредственно над i подсле инкремента.
Александр Заграй
а что делает ++i ?
Похожие вопросы
- программа C# if i % x == 0 пример
- while(!((str[i]>='0'&&str[i]<='9')||str[i]=='\0')) как перевести на человеческий язык это условие? - Язык си
- Вопрос от начинающего ))) Список вопросов (питон, Си и в принципе работа ПК) (Мало что понимаю)
- объясните как именно работает цикл (int i = 0; i < N; i++) в этом коде, почему нельзя написать i+1, вместо i++
- X+i*a+j и X[i][j]. В чем разница как использовать первый вариант записи.
- Excel В одной ячейке значение к примеру 20. Необходимо выполнить (1+2)^i+1 (i+1 должен продолжаться до 20 включ.)
- Что оптимальнее: if(a > 0) или if(a != 0) ?
- как заставить торрент работать быстрее???
- простенький вопрос по Си....
- Вопрос по Си