A - (--b)
A---b
J --;
cout << i << "\t" << j << endl; // На экран выведено 7 10
system("Pause");
return 0;
}
Из примера видно, что разница между префиксной и постфиксной формами этих операций не чувствуется. Действительно в этом примере эти две формы работают одинаково.
Немного изменим текст программы:
#include <iostream>
using namespace std;
int main()
{
int i = 7, j = 10;
cout << ++ i << "\t " << j ++ << endl; // На экран выведено 8 10
cout << i << "\t " << j << endl; // На экран выведено 8 11
cout << -- i << "\t " << j -- << endl; // На экран выведено 7 11
cout << i << "\t " << j << endl; // На экран выведено 7 10
system("Pause");
return 0;
}
Разница между префиксной и постфиксной формами этих операций заключается в том, что при префиксной форме, переменная сначала меняет свое значение, а потом это измененное значение обрабатывается. В постфиксной форме значение переменной сначала обрабатывается и только потом ее значение изменяется на 1.
В первом примере операторы ++ i; j ++; просто изменяют значения переменных i и j без какой-либо другой обработки и только после окончания работы этих операторов на экран выводятся эти измененные значения. Поэтому различие между префиксной и постфиксной формами не чувствуется. То же самое происходит и при выполнении операторов -- i; j--;.
|
|
Во втором примере префиксные и постфиксные формы операций инкремента и декремента участвуют в выполнении оператора вывода данных на экран. Поэтому при выполнении префиксных операций сначала происходит изменение значений переменной i, потом эти измененные значения выводятся на экран, а при выполнении постфиксных операций сначала выводятся неизмененные значения переменной j, а уже после этого производятся изменения значения этой переменной.
Еще пример:
#include <iostream>
using namespace std;
int main()
{
int i = 7, j = 10, k;
k = (++ i) + (j --); // Или k = ++ i + j --;
cout << "k = " << k << endl; // k = 18
cout << "i = " << i << endl; // i = 8
cout << "j = " << j << endl; // j = 9
system("Pause");
return 0;
}
А чему будет равно значение переменной k в этих случаях:
int i = 7, k;
k = (i ++) + i;
Здесь k = 14.
int i = 7, k;
k = (++ i) + i;
Здесь k = 16.
int i = 7, k;
k = i + (++ i);
Здесь k = 16.
int i = 7, k;
k = (++ i) + (++ i);
Здесь k = 18.
То есть сначала просматривается все выражение, при каждой встрече операции инкремента (декремента) в префиксной форме выполняется изменение на единицу переменной, а затем вычисляется выражение.
А как интерпретировать такие выражения:
a+++b
Эти выражения следует интерпретировать так:
(a++) + b
(a--) - b
Но не так:
a + (++b)
Для более понятной записи текста программы в подобных случаях лучше использовать скобки.
|
|
Операции этой группы служат для сравнения значений. Сюда входят следующие операции:
· == - равно;
· != - не равно;
· > - больше;
· >= - больше или равно;
· < - меньше;
· <= - меньше или равно.
Все эти операции бинарные. В качестве операндов могут быть использованы выражения любых арифметических типов данных. Результат этих операций всегда логического типа (bool).
Примеры:
a == b, a!= b, a > 10, (a - 3) >= (b + 10).