Билет 11

advertisement
Операторы присваивания
Операторы присваивания служат для вычисления значений выражений и
присваивания вычисленных значений переменным.
Оператор присваивания имеет вид:
x = s;
где
x – имя переменной,
s – выражение того же типа,
= - знак присваивания.
Оператор присваивания дает команду компьютеру на вычисление значения
выражения справа от знака присваивания и запись вычисленного значения в ячейку
памяти, отведенную для хранения переменной, стоящей слева от знака присваивания. При
этом прежнее значение переменной аннулируется. Поэтому в программировании можно
использовать, например, такие операторы присваивания:
y = y + 5;
Выполняя его, компьютер возьмет старое значение переменной y и увеличит его
на 5, после чего полученное новое значение этой переменной снова запишет в
отведенную для нее ячейку памяти.
Начинающий программист может сделать ошибку, записав слева от знака
присваивания не имя переменной, а константу или выражение:
10.5 = x;
a + b = y + 5.2;
В отличие от Паскаля, присваивание в Си может быть организовано несколькими
способами:
как оператор присваивания:
a = 5;
как оператор-выражение:
a++;
как операция, встречающаяся в выражении несколько раз, при этом операции
присваивания выполняются справа налево:
a = b = c = 5;
как операция, если стоит внутри других операций:
a = (b = 1) + 4;
Сначала переменной b будет присвоено значение 1, а затем к результату,
полученному в скобках, будет прибавлено 4..
a = (b = 1, c = 2) + 4;
В этом случае сначала выполняются обе операции присваивания в скобках
(перечисляются через запятые). Результат операций в скобках равен результату последней
операции в них, то есть 2. После этого выполняются остальные операции в выражении, в
данном случае операция сложения. Таким образом, одним оператором присваивания
будут присвоены значения сразу трем переменным:
b = 1, c = 2, a = 6
Операции присваивания, изменяющие старые значения переменных, реализуются в
Си объединенными арифметическими или побитовыми операциями присваивания:
исходный оператор
объединенный оператор
a = a + 5;
a+=5;
a = a – 3;
a-=3;
a = a * 4;
a*=4;
a = a / 6;
a/=6;
a = a % 2;
a%=2;
a = a + b / c;
a+=b/c;
a = a & 3;
a&=3;
a = a | 2;
a|=2;
a = a * b / c;
a*=b/c;
a = a * (b + c);
a*=b + c;
Эти операции, как и сама операция присваивания, имеют самый низкий приоритет
и выполняются в выражениях последними справа налево, поэтому, например, замена
a = a / b *c;
на
a/=b * c;
будет неверна – получаются различные выражения.
В операторах присваивания могут использоваться операции инкремента
++ и декремента --. Знаки инкремента и декремента могут стоять в выражениях как
перед переменной (префиксная запись), так и после нее (постфиксная запись). При этом
выражения будут вычисляться по-разному:
при префиксной записи (знак перед переменной) сначала изменяется
значение этой переменной, а затем выполняются другие операции, и последней –
операция присваивания:
a = 4;
b = ++a;
a=5, b=5
c = ++b/2;
b=6, c=3
d = ++a/2;
a=6, d=3
при постфиксной записи (знак после переменной) сначала вычисляется
значение выражения со старыми значениями переменных, выполняется операция
присваивания, после чего выполняются операции инкремента или декремента:
a = 4;
b = a++;
b=4, a=5
c = b++/2;
c=2, b=5
d = a++/2;
d=2, a=6
В Си приветствуется присваивание начальных значений переменным при их
описании – инициализация переменных:
int i=5;
float x=3.1415;
char c=’A’;
Инициализировать переменные можно и выражениями, операндами которых
являются константы:
int k=117*16;
float x= 3.1415*2.0e-3;
Если значения переменных целого или вещественного типов явно не заданы
при их описании, то они автоматически инициализируются нулями.
Примеры записи операторов присваивания:
1.
int a=1;
int b=2;
int c=3;
float x=2.0;
a+= ++a / b++
%
(c-= ceil(sqrt(x)));
a=2 b=3
-
++a % (int) floor(sqrt(x)); a=3 b=6
c=1
b+= (a | c++)
c=2
c|= --b % a--;
a=2 b=5
c=2
2.
int a=3;
int b=2;
int c=1;
c+= --a / b++
+
a % b;
a=2 b=3 c=2
b|= ++a / (c+= b++, b+= a % c);
a=3 b=7 c=5
a%= --a
a=2 b=5 c=8
-
++b;
3.
int a=0;
int b=0;
int c=0;
c+= b++;
a=0 b=1
c=0
b+= ++c % ('A' / '1'
+
'A' % '1' % 5);
a=0 b=2
c=1
a-= ++b
c=2
-
c++;
a=-2 b=3
Download