Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лабы_по_проге_Берлин / Книги / учебное пособие ОАиП.pdf
Скачиваний:
49
Добавлен:
11.02.2015
Размер:
947 Кб
Скачать

Операции и выражения

В программах широко используются выражения, состоящие из одного или более операндов, объединенных знаками операций. Операции – это специальные комбинации символов, специфицирующие действия по преобразованию различных величин. Компилятор интерпретирует каждую из этих комбинаций как самостоятельную единицу, называемую лексемой. В качестве операндов могут быть использованы переменные, константы или другие выражения. Имеются три основных класса операций: арифметические, отношения (логические), побитовые. Различают операции унарные (с не более чем одним операндом) и бинарные (с двумя и более операндами). Рассмотрим основные операции, используемые в С(С++). Операции должны использоваться точно так, как они представлены в таблице: без пробельных символов между символами в тех операциях, которые представлены несколькими символами.

 

 

 

 

 

Таблица 4.

Знак

Наименован

 

Пример

 

Опера

ие операции

 

 

 

 

ции

 

 

 

 

 

 

Арифметические операции

 

 

+

Сложение

 

a= b + c;

если b=6, c=4, то a=10

-

Вычитание

 

a=

b - c;

если b=3, c=8, то a= -5

-

Арифметическое

a= - b;

если b=132, то a= -132

 

отрицание

 

 

 

 

*

Умножение

 

a= b * c;

если b=2, c=4, то a= 8

/

Деление

 

a=

b / c;

если b=7.0, c=2.0, то a= 3.5

%

Остаток

от

a= b % c;

если b=10, c=3, то a= 1

 

деления

 

 

 

 

 

Логические операции

 

 

 

&

Логическое

“И”

a=

b && c;

если b и c не равны нулю, то

 

(конъюнкция)

 

a=1, в противном случае a=0

||

Логическое “ИЛИ”

a=

b || c;

если b и c равны нулю, то a=0,

 

(дизъюнкция)

 

в противном случае a=1

!

Логическое

 

a=

! b;

если b равно нулю, то a=1,

 

отрицание

 

если b не равно нулю, то a=1

 

(инверсия)

 

 

 

 

 

Побитовые операции

 

 

 

&

Поразрядная

 

a=

b & c;

если оба сравниваемых бита

 

конъюнкция

 

единицы, то бит результата равен 1, в

 

 

 

противном случае – 0.

 

 

 

Если b=1010, c=0110, то a=0010

|

Поразрядная

 

a=

b | c;

если любой (или оба) из

 

дизъюнкция

 

сравниваемых битов равен 1, то бит

 

 

 

результата устанавливается в 1, в противном

 

 

 

случае - в нуль.

 

 

 

Если b=1010, c=0110, то a=1110

^

Поразрядное

 

a= b ^ c;

если один из сравниваемых битов

 

“исключающее

 

равен 0, а второй бит равен 1, то бит

 

ИЛИ”

 

результата равен 1, в противном случае (оба

 

 

 

бита равны 1 или 0) – 0.

 

 

 

 

 

 

Если b=1010, c=0110, то a=1100

 

~

Поразрядная

 

a= ~ b;

если b=1010, то a=0101

 

 

инверсия

 

 

 

 

 

 

<<

Сдвиг влево

 

a= b << c;

осуществляется сдвиг значения

 

 

 

b влево на c разрядов; в освободившееся

 

 

 

разряды заносятся нули.

 

 

 

 

 

Если b=1011, c=2, то a=1100

 

>>

Сдвиг вправо

 

a= b >> c;

осуществляется сдвиг значения

 

 

 

b вправо на c разрядов; в освободившееся

 

 

 

разряды заносятся нули, если b имеет тип

 

 

 

unsigned и копии знакового бита в противном

 

 

 

случае. Если b=1011, c=2, то a=0010

 

 

Операции отношения

 

 

 

 

 

==

Сравнение

на

a == b;

вырабатывается 1, если a равно b, и

 

равенство

 

0 – в противном случае

 

 

 

>

Больше

 

a > b;

вырабатывается 1, если a больше b,

 

 

 

и 0 – в противном случае

 

 

>=

Больше или равно

a >= b;

вырабатывается 1, если a больше

 

 

 

или равно b, и 0 – в противном случае

 

<

Меньше

 

a < b;

вырабатывается 1, если a меньше b,

 

 

 

и 0 – в противном случае

 

 

<=

Меньше или равно

a <= b;

вырабатывается 1, если a меньше

 

 

 

или равно b, и 0 – в противном случае

 

!=

Не равно

 

a != b;

вырабатывается 1, если a не равно

 

 

 

b, и 0 – в противном случае

 

 

 

Операции присваивания

 

 

 

 

 

=

Простое

 

a = b;

a присваивается значение b

 

 

присваивание

 

 

 

 

 

 

++

Унарный

 

a++ (++a)

значение

a

увеличивается

на

 

инкремент

 

единицу

 

 

 

 

--

Унарный

 

a-- (--a)

значение

a уменьшается

на

 

декремент

 

единицу

 

 

 

 

znak=

Составная

 

a znak= b; понимается как a = a znak b;

 

операция

 

Например,

a += b,

если a=3, b=4, то a=7

 

присваивания;

 

 

 

 

 

 

 

znak {*, /, %, +, -,

 

 

 

 

 

 

<<, >>, &, |, ^}

 

 

 

 

 

 

 

Операции адресации и

разадресации

 

 

 

&

Адресация

 

ptr= & b;

ptr присваивается адрес b

 

*

Разадресация

 

a= * ptr;

a присваивается значение по

 

 

 

адресу ptr

 

 

 

 

Операция последовательного вычисления

,

Запятая

a = (c-- , ++b);

“,” вычисляет два своих

 

 

операнда слева направо. Результат операции

 

 

имеет значение и тип второго операнда. Если

 

 

c=2, b=3, то a=4,c=1,b=4

 

 

Операция условного

выражения

 

 

?:

Условная

a=

(b<0) ? (-b)

: (b);

a присваивается

 

операция

абсолютное значение b

 

 

Size-операция

 

 

 

 

sizeof

Определение

a=

sizeof(int);

определяет

размер памяти,

 

размера в байтах

которому соответствует идентификатору или

 

 

типу. a присваивается размер типа int

Операция присваивания

Операция присваивания ( = ). В результате выполнения этой операции переменная, стоящая слева от знака "=", принимает значение выражения, расположенного справа. Отличительной чертой операции присваивания в языке С является то, что она может быть использована в одном выражении более одного раза. Например:

void main(void) { int i,j,k;

i=j=k=23;

}

В этом примере присваивания выполняются справа налево: сначала переменная k принимает значение 23, затем j и, наконец, i принимают то же значение.

Арифметические операции

Операция сложения (+). Выполнение операции ”+" приводит к сложению двух величин, стоящих справа и слева от этого знака. Операнды, используемые в операции, могут быть как переменными, так и константами. Операция "+" является бинарной:

i=j+k;

printf("%d",j+k);

Операция вычитания (-). В результате выполнения этой операции переменная получает значение разности чисел, стоящих соответственно слева и

справа от знака "-":

 

 

 

i=j-k;

 

 

 

 

printf("%d",j-k);

 

 

 

Операция

изменения

знака (-). Знак

"-" может использоваться для

задания или

изменения

алгебраического

знака некоторой

величины

(выражения):

 

 

 

 

i=-10;

 

 

 

 

i=-(j-k);

 

 

 

 

n=-j;

 

 

 

 

// (результат = 1) // (результат = 1.75) // (результат = 1.25)

Операция умножения (*). В результате выполнения этой операции вычисляется произведение двух или более операндов.

Операция деления (/). Операция деления над целыми числами выполняется не так, как над числами с плавающей точкой. Результат деления целых чисел есть число целое. При этом дробная часть у результата отбрасывается - "усечение". Результат деления целых чисел округляется не до ближайшего целого, а всегда до меньшего целого. Например:

void main(void) { int i;

float k; i=6/4; k=7./4.; k=6/4.;

}

Операция деления по модулю (%). Операция используется в целочисленной арифметике. В результате получается остаток от деления. Например, в результате 14%4 получаем 2.

Большинство операций С(С++) выполняют преобразование типов, чтобы привести операнды выражений к общему типу, или чтобы расширить короткие величины до размера целых величин, используемых в машинных операциях. Преобразования, выполняемые операциями С(С++), зависят от специфики операций и от типа операнда или операндов. Тем не менее, многие операции выполняют похожие преобразования целых и плавающих типов. Эти преобразования известны как арифметические преобразования.

Обычные арифметические преобразования осуществляются следующим образом:

-операнды типа float преобразуются к типу double;

-если один операнд типа double, то второй операнд преобразуется к типу

double;

-любые операнды типов char или short преобразуются к int;

-любые операнды типов unsigned char или unsigned short преобразуются

ктипу unsigned int;

-если один операнд типа unsigned long, то второй операнд преобразуется

ктипу unsigned long;

-если один операнд типа long, то второй операнд преобразуется к типу

long;

-если один операнд типа unsigned int, то второй операнд преобразуется к unsigned int.

Операндами операции % должны быть целые числа. Остальные операции выполняются над целыми и плавающими операндами. Типы первого и второго операндов могут отличаться. Арифметические операции выполняют обычные арифметические преобразования операндов. Типом результата является тип операндов после преобразования.

#include <stdio.h> #include <conio.h>