using System;
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
int x = 0, y = 0;
Console.WriteLine(x++);
Console.WriteLine(++y);
Console.ReadKey();
}
}
}
Этот код сам за себя всё скажет!!!
Другие языки программирования и технологии
C#. ++x или x++ В чем разница при записи инкремента этими двумя способами?
Просто разный приоритет!
Надо смотреть таблицу приоритетов, префиксный инкремент (++x) имеет высший приоритет, а постфиксный инкремент (x++) - низший приоритет! И в комплексе остальных операций в выражении можно следить, что делается первым действием, что вторым и т. д. Соответственно вывод, присвоение и некоторые другие операции в комплексе с разными инкрементами будут давать разные результаты!
Надо смотреть таблицу приоритетов, префиксный инкремент (++x) имеет высший приоритет, а постфиксный инкремент (x++) - низший приоритет! И в комплексе остальных операций в выражении можно следить, что делается первым действием, что вторым и т. д. Соответственно вывод, присвоение и некоторые другие операции в комплексе с разными инкрементами будут давать разные результаты!
Нужно видеть последовательность операций. Иногда из- за побочного влияния этих операций разница ощутима. Например в примере Сергея есть двуместная операция сложения и действия над операндами делаются ДО или ПОСЛЕ операции.
А вот в таком цикле неважно, так как выполняется ОДНОМЕСТНАЯ операция:
for(int I=0;I < 10;I++) printf("%d",I);
printf("\n");
for(int I=0;I < 10;++I) printf("%d",I);
А вот в таком цикле неважно, так как выполняется ОДНОМЕСТНАЯ операция:
for(int I=0;I < 10;I++) printf("%d",I);
printf("\n");
for(int I=0;I < 10;++I) printf("%d",I);
Талант Ашым Уулу
Можно и так:
for(int I=0;I < 10;) printf("%d ",I++);
printf("\n");
for(int I=0;I < 10;) printf("%d ",++I);
for(int I=0;I < 10;) printf("%d ",I++);
printf("\n");
for(int I=0;I < 10;) printf("%d ",++I);
в первом варианте сначала осуществляется инкремент, а потом операции с переменной, во втором варианте - наоборот. потести:
int a,b,c;
a=1,b=1;
c = ++a + ++b; printf("%d = %d + %d\n",c,a,b);
a=1,b=1;
c = a++ +b++; printf("%d = %d + %d\n",c,a,b);
int a,b,c;
a=1,b=1;
c = ++a + ++b; printf("%d = %d + %d\n",c,a,b);
a=1,b=1;
c = a++ +b++; printf("%d = %d + %d\n",c,a,b);
Одна форма записи префиксная, другая - постфиксная.. .
Разница ощутима, если работаешь в цикле, скажем, for
x++ -значение прибавится на еденицу сразу же.. .
++x - значение прибавится на еденицу за следующим циклом.. .
Разница ощутима, если работаешь в цикле, скажем, for
x++ -значение прибавится на еденицу сразу же.. .
++x - значение прибавится на еденицу за следующим циклом.. .
Бауржан Калиев
в корне неверно.
Aaa Aaa
Бред написал.Как раз в записи for(int I=0;I < 10;I++) cout I;
И таком же префиксном разницы нет.
И таком же префиксном разницы нет.
Виктор Лапиков
Бред написал.
++x префиксная форма, вначале увеличивается х, а затем используется в вычислениях как х.
x++ постфиксная форма, вначале используется в вычислениях как х, а затем х увеличивается.
В операторе цикла for декрементация работает одинаково, поскольку обычно декрементация происходит только между циклами,
когда не происходит никаких вычислений с х.
Если же внутри цикла есть терм (операция) с дополнительная декрементация одного из видов, то это относится только к этому терму. Ясно, что в этом случае х делает лишний скачок и число циклов уменьшается по сравнению с обычным.
++x префиксная форма, вначале увеличивается х, а затем используется в вычислениях как х.
x++ постфиксная форма, вначале используется в вычислениях как х, а затем х увеличивается.
В операторе цикла for декрементация работает одинаково, поскольку обычно декрементация происходит только между циклами,
когда не происходит никаких вычислений с х.
Если же внутри цикла есть терм (операция) с дополнительная декрементация одного из видов, то это относится только к этому терму. Ясно, что в этом случае х делает лишний скачок и число циклов уменьшается по сравнению с обычным.
Aaa Aaa
Не обижайся,я не хотел оценку ставить)). Получилась 5 за" участие".
Ну это примерно так:
for (int i=0; i < 10;)
{
...
i++;
}
или
for (int i=0; i < 10;)
{
...
++i;
}
Так как эти унарные операции применены в ОДНОМЕСТНОЙ операции,то никакой разницы не будет,можешь их записать в for:
for (int i=0; i < 10;i++){}
или
for (int i=0; i < 10;++i){}
Ну это примерно так:
for (int i=0; i < 10;)
{
...
i++;
}
или
for (int i=0; i < 10;)
{
...
++i;
}
Так как эти унарные операции применены в ОДНОМЕСТНОЙ операции,то никакой разницы не будет,можешь их записать в for:
for (int i=0; i < 10;i++){}
или
for (int i=0; i < 10;++i){}
Разницы особой нету, я всегда в циклах использую ++х, где-то читал что это работает быстрее, вроде на хабре.
Похожие вопросы
- X+i*a+j и X[i][j]. В чем разница как использовать первый вариант записи.
- Как в C++ приравнять переменную и текст? А то такую запись нельзя. А без этого задачу не решить
- программа C# if i % x == 0 пример
- C++. В операторе switch нельзя разве использовать case x? а x пробежать в цикле for?
- На чём лучше написать конвертер doc/x, xls/x в любой формат? Смотрю в сторону C#?
- PascalABC График постоить график x-3/x+7
- Вопрос про математические процессы инкрементов и декрементов с префиксами и постфиксами. C++
- Уравнение a*x+b*y=c
- C++. Как работает постфиксный инкремент?
- C++.Обычная задача : найти кол-во пар (x,y) , удовлетворяющих условию X^2+Y^2<N. Помогите оптимизировать.
Спасибо хза уточнение.