Операции, операторы и выражения.

Выражения являются объектами, конструированными с использованием операции (сложения, вычитания, умножения и т.д.). Константы, переменные (включая структуры, массивы и вызовы функций) и представляют собой формулы для вычисления значений переменных.

Выражения состоят из операндов (элементов языка).

Операции классифицируются по числу участвующих в них операндов и по типу действия, которые они выполняют.

Классифицируются по числу операндов:

1) Первичные, определяющие размер, разделители и компоненты составных объектов языка.

2)Унарные – выполнения действия под одним операндом.

3)Бинарные – требуется два операнда (включая большинство операций С).

4)Тройная – требуется 3 операнда.

?: – условная операция (одна)

Порядок выполнения операндов при вычислении значения выражения определяется их приоритетами и может регулироваться с помощью круглых скобок. Приоритет можно рассматривать, как ранг операции.

Порядок можно рассматривать, как направление, в котором выполняются операции, обладающие одинаковым приоритетом.

Приоритет Знак операции Класс операции Порядок
( )[ ] –> . Первичные ––––>
!++ -- ~ - * & sizeof (тип) Унарные <––––
* / % Бинарные мультипликативные ––––>
+ – Аддитивные ––––>
<< >> Сдвига ––––>
< > <= >= Отношения ––––>
== != Равенство ––––>
& Побитовая и ––––>
^ Исключающая или ––––>
½ Побитовая или ––––>
&& Логическое и  
½½ Логическое или ––––>
?: Условное или <––––
= + = – = *= /= %= &= ^= ½= Присваивающая <––––
, Запятая ––––>

 

Знак операции Назначение операции
() Вызов функции
[] Выделение элемента массива
––––> Выделение элемента записи
. Выделение элемента записи
! Логическое отрицание
++ Увеличение на единицу
– – Уменьшение на единицу
~ поразрядное отрицание
изменение знака
* обращение по адресу
& - взятие адреса
│ sizeof определение размера в байтах
( тип) преобразование типа
* - умножение
/ Деление
% определение остатка от деления
+ Сложение
Вычитание
<< сдвиг влево
>> сдвиг вправо
< меньше, чем
> больше, чем
<= меньше или равно
>= больше или равно
= = Равно
!= не равно

 

Для остальных операций назначения определяются названием класса операции (см. предыдущую таблицу).

Оператор “,” используется для связки нескольких выражений. Левая сторона оператора “,” всегда вычисляется, как void (т.е. не выражающее значение) – это означает, что значение выражения находящегося с правой стороны станет значением разделенного запятыми выражения.

Пример:

x = (y=3, y+1);

Скобки необходимы, т.к. операция запятая имеет более низкий приоритет по сравнению с операцией присваивания. Оператор “,” аналогичен и в русском языке.

Оператор sizeof – унарный оператор, возвращающий длину в байтах переменной или типа помещенных в скобке.

Пример:

float f;

printf (“% f”, sizeof f);

printf (" % d ", sizeof (int) );

В результате выполнения этого оператора выдаются значения 4 и 2.

Для вычисления размера типа, тип помещается в круглые скобки.

Для имени переменной круглые скобки необязательны.

Пример:

1. а! = b

Дает результат 1, если а не = b, и 0 в противном случае.

Операции + + и - - можно записывать как перед операндом, так и после него ++а и а++. В первом случае значение операнда изменяется перед его использованием в соответствующем выражении, а во втором после его использования.

Пример №1.

b = 1;

с = 2;

а = b+с++;

Получены такие значения = 3, а = 3

Пример №2.

b = 1;

с = 2;

а = b+ (++c);

Получены такие значения

с = 3;

а = 4;

Пример №3.

а = ~ b;

b = 1001

а = 0110

Пример №4.

а = b % c

b = 5

c = 2

a = 1

Эту операцию нельзя использовать для переменных типа float и double.

Пример №5.

а = b << c

b = 1001

c = 2

a = 0100

В данной операции осуществляется сдвиг значения влево на с разрядов, в оставшиеся разряды b заносятся нули.

Пример №6.

а = = b

Дает результат единица, если а = b, и 0 в противном случае.

Остальные операции отношения аналогичны: результат = 1, если истинно, и 0 если ложно.

Пример №7.

y = x ? a:b

(Тройная операция) В этом выражении y = a, если x не = 0 и y = b,

если х = 0

Пример №8.

y = (a > b) ? a : b;

Позволяет присвоить переменной y значение большей переменной а или b.

y = max (a,b) – максимальное значение между а и b.

Пример №9. (конъюнкция (логическое "и"))

а = b & c;

Если b = 1010, c = 0110

(логическое умножение будет означать: 1*0 0*1 1*1 0*0),

то а = 0010

Пример: Поразрядная дизъюнкция ("или")

а = b|с

b = 1010, с = 0110, то а = 1110

1 и 0 выбирают 1, 0 и 1 выбирают 1, 1 и 1 выбирает 1,

0 и 0 выбирает 0

Поразрядно исключающая или

а = b ^ c

b = 1100

c = 0110

a = 1010

Если соответствующие разряды имеют различные значения, то результатом будет 1, в противном случае 0.

В языке С а = а + 5; аналогично записи а + = 5. В общем виде

а + = b соответствует а = а + b.

По аналогии используются другие бинарные операции.

При выполнении арифметических операций, если в выражении появляются операнды различных типов, в С действуют следующие правила преобразования к некоторому общему типу.

1) Операторы типа char и short преобразуются к типу int. А типа float к типу double.

2) Если один из 2-х операндов имеет тип double, другой операнд преобразуется к типу double, и результат имеет тип double.

3) Если один из операторов имеет тип unsigned, то и другой операнд преобразуется к типу unsigned результат unsigned.

4) Если один из операндов имеет тип long, другой тоже преобразуется к long, результат long.

5) Если не выполнено условие 1-4, оба операнда должны быть типа int и результат имеет тип int.

Схема выполнения арифметических преобразований.

double <──── float

long

unsigned

int <───── char, short.

Горизонтальные преобразования выполняются всегда, вертикальные по мере необходимости.








Дата добавления: 2016-04-14; просмотров: 670;


Поиск по сайту:

При помощи поиска вы сможете найти нужную вам информацию.

Поделитесь с друзьями:

Если вам перенёс пользу информационный материал, или помог в учебе – поделитесь этим сайтом с друзьями и знакомыми.
helpiks.org - Хелпикс.Орг - 2014-2024 год. Материал сайта представляется для ознакомительного и учебного использования. | Поддержка
Генерация страницы за: 0.018 сек.