Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
shpory_si.docx
Скачиваний:
33
Добавлен:
25.09.2019
Размер:
205.61 Кб
Скачать

6. Операции языка с. Арифметические, логические операции. Поразрядные операции.

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

Операнд - это константа, литерал, идентификатор, вызов функции, индексное выражение, выражение выбора элемента или более сложное выражение, сформированное комбинацией операндов, знаков операций и круглых скобок. Любой операнд, который имеет константное значение, называется константным выражением. Каждый операнд имеет тип.

Оператор – это часть программы, которая может быть выполнена отдельно, т.е. оператор определяет некоторое действие.

Язык С содержит большое количество встроенных операций. Существует 5 основных класса операций:

– арифметические;

– логические;

– поразрядные;

– сравнения (присваивания);

– присваивания.

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

Знак операции

Операция

Группа операций

*

Умножение

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

/

Деление

%

Остаток от деления

+

Сложение

Вычитание

&&

Логическое И

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

||

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

!

Не, отрицание

Если операция деления применяется у целому или символьному типам, то остаток от деления отбрасывается.

К логическим операциям относятся операция логического И (&&) и операция логического ИЛИ (||).

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

Логические операции не вызывают стандартных арифметических преобразований. Они оценивают каждый операнд с точки зрения его эквивалентности нулю. Результатом логической операции является 0 или 1, тип результата int.

Операция логического И (&&) вырабатывает значение 1, если оба операнда имеют нулевые значения.

Если один из операндов равен 0, то результат также равен 0. Если значение первого операнда равно 0, то второй операнд не вычисляется.

Операция логического ИЛИ (||) выполняет над операндами операцию включающего ИЛИ. Она вырабатывает значение 0, если оба операнда имеют значение 0, если какой-либо из операндов имеет ненулевое значение, то результат операции равен 1. Если первый операнд имеет ненулевое значение, то второй операнд не вычисляется.

Поразрядные операции

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

Знак операции

Операция

Группа операций

&

Поразрядное И

Поразрядные операции

|

Поразрядное ИЛИ

^

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

<<

Сдвиг влево

>>

Сдвиг вправо

~

НЕ

Операция поразрядного логического И (&) сравнивает каждый бит первого операнда с соответствующим битом второго операнда. Если оба сравниваемых бита единицы, то соответствующий бит результата устанавливается в 1, в противном случае в 0.

Операция поразрядного логического ИЛИ (|) сравнивает каждый бит первого операнда с

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

Операция поразрядного исключающего ИЛИ (^) сравнивает каждый бит первого операнда с соответствующими битами второго операнда. Если один из сравниваемых битов равен 0, а второй бит равен 1, то соответствующий бит результата устанавливается в 1, в противном случае, т.е. когда оба бита равны 1 или 0, бит результата устанавливается в 0.

Пример.

int i=0x45FF, /* i= 0100 0101 1111 1111 */

j=0x00FF; /* j= 0000 0000 1111 1111 */

char r;

r = i^j; /* r=0x4500 = 0100 0101 0000 0000 */

r = i|j; /* r=0x45FF = 0100 0101 0000 0000 */

r = i&j; /* r=0x00FF = 0000 0000 1111 1111 */

Поразрядные операторы сдвига сдвигают все биты переменной вправо или влево. Формат:

Переменная >> количество разрядов

Переменная << количество разрядов

Во время сдвигов бита в один конец числа, другие заполняются нулями. Но если число типа signedint отрицательно, то при сдвиге вправо левый конец заполняется единицами так, что знак числа сохраняется.

Поразрядная операция отрицания НЕ (~) инвертирует состояние каждого бита операнда, т.е. 0 преобразуется в 1, а 1 – в 0.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]