Если записи такие
1) for (i=0; i<100+10 ;i++)
2) for (i=0; i<y+x ;I++)
3) while (1-1)
4) while (x+y)
В каких случаях будет решаться примеры каждый раз, при повторе? для while я так понимаю всегда, а для for? будет ли он решать константы 100+10 для сравнения с i 110 раз? а с переменными?
Другие языки программирования и технологии
for и while всегда обрабатывают формулы? С++
Современные компиляторы С/C++ константные выражения вычисляют на этапе компиляции. Так что оптимизирующий компилятор вычислит 1-1, поймёт, что while(0) не будет выполнен и выбросит тело цикла из генерируемого выполняемого кода.
100+10 тоже будет вычислено на этапе компиляции и в программе будет стоять константа 110.
При использовании в выражении переменных ситуация сложнее: невозможно предсказать, насколько хорошо отработает оптимизатор. Но если ты используешь компилятор с открытым исходным кодом, то можешь взять исходники и самостоятельно разобраться, почему оптимизатор сработал именно так, а не иначе.
Сколько операций в 1 || y==1 || y==0 - для этого есть учебники языка. В которых чёрным по белому описывается семантика операций || и &&. Из которой однозначно следует, что будет не более одной проверки. А скорее всего, не будет ни одной: оптимизирующий компилятор вообще уберёт не нужное условие.
100+10 тоже будет вычислено на этапе компиляции и в программе будет стоять константа 110.
При использовании в выражении переменных ситуация сложнее: невозможно предсказать, насколько хорошо отработает оптимизатор. Но если ты используешь компилятор с открытым исходным кодом, то можешь взять исходники и самостоятельно разобраться, почему оптимизатор сработал именно так, а не иначе.
Сколько операций в 1 || y==1 || y==0 - для этого есть учебники языка. В которых чёрным по белому описывается семантика операций || и &&. Из которой однозначно следует, что будет не более одной проверки. А скорее всего, не будет ни одной: оптимизирующий компилятор вообще уберёт не нужное условие.
Дима Бутенко
ОГРОМНОЕ СПАСИБО ЗА ПОДРОБНОСТИ, отмечу как лучший ответ
1. while (1-1) = while (0), т. е. не будет выполнено ни разу
2. if (1 || y==1 || y==0) будет всегда истина, ибо для ИЛИ достаточно одного значения "ИСТИНА "(1) и остальные условия проверяться не будут
Остальное вообще банально и мне лень писать истины прописные
2. if (1 || y==1 || y==0) будет всегда истина, ибо для ИЛИ достаточно одного значения "ИСТИНА "(1) и остальные условия проверяться не будут
Остальное вообще банально и мне лень писать истины прописные
Дима Бутенко
не поняли вопроса, когда компилятор поймёт, где можно оптимизировать?
Сколько процессор потратит времени на это? Константы например не меняются и по сути можно их решать 1 раз, а переменные нужно постоянно обновлять, но как распорядиться тут С++?
Сколько процессор потратит времени на это? Константы например не меняются и по сути можно их решать 1 раз, а переменные нужно постоянно обновлять, но как распорядиться тут С++?
while (1-1) -тело цикла не выполнится ни разу.
while (x+y) - зависит от того, какими были x и y и что с ними делается теле цикла
"будет ли он решать константы 100+10 для сравнения с i 110 раз? а с переменными?" - константы не решаются: тело цикла выполнится 110 раз, если в нем не предусмотрен преждевременный выход из цикла
"for (i=0; i<y+x ;I++)" выполнится ни разу или бесконечно, в зависимости от x и y (I - это не i)
while (x+y) - зависит от того, какими были x и y и что с ними делается теле цикла
"будет ли он решать константы 100+10 для сравнения с i 110 раз? а с переменными?" - константы не решаются: тело цикла выполнится 110 раз, если в нем не предусмотрен преждевременный выход из цикла
"for (i=0; i<y+x ;I++)" выполнится ни разу или бесконечно, в зависимости от x и y (I - это не i)
Дима Бутенко
Мне не банальные уроки по С++ нужны, мне нужен ответ, КОГДА ПРОЦЕССОР ЭТО ОБРАБАТЫВАТЬ БУДЕТ??? 1-1 теоретически компилятор может сам решить в 0 и не компилить это... НО ДЕЛАЕТ ЛИ ОН ЭТО?
1) будет
3) ни разу
остальные о Х У зависит
3) ни разу
остальные о Х У зависит
Условие повторения цикла вычисляется на каждой итерации для всех типов циклов. А уж какие вычисления компилятор сумеет соптимизировать - вопрос отдельный.
Похожие вопросы
- for or while?c++
- С++, Чем отличаеться цикл for, от while?
- Какой цикл может продолжаться бесконечно долго for\foreach\while ? (PHP) И почему?
- for и while Преимущества и недостатки каждого в той или иной ситуации?
- Азы C++: "while" заменяем на "for"
- Помогите с кодом C#. Нужно удалять из строк начальные пробелы с помощью while, if, for, без специальных методов
- Как можно написать программу на языке C, которая будет выводить числа от 1 до 1000 без if, switch, do, while, for, goto?
- Паскаль. For, while, repeat, until, min/max, div/mod.
- решите, пожалуйста, задачу на языке с с помощью циклов (for, while, do...while)
- Сколько всего существует еще циклов, кроме for, while, do while ???