Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
konspekt_1_semestr.doc
Скачиваний:
12
Добавлен:
02.08.2019
Размер:
654.34 Кб
Скачать

Унарные операции

& операция получения адреса операнда

&c_Symb - адрес размещения в памяти значения переменной c_Symb.

* операция обращения по адресу (называют еще операцией разыменования (доступ по адресу к значению того объекта, на который указывает операнд).

- унарный минус (изменяет знак арифметического операнда).

+ унарный плюс (введен для симметрии с унарным минусом).

~ побитовое отрицание 0001 1100 à 1110 0011

! логическое отрицание 0 à 1, не 0 à 0.

++ увеличение на единицу (инкремент или автоувеличение), существует две формы:

префиксная - увеличение до использования

...

int result, arg=2;

result = ++arg;

после выполнения result примет значение 3.

постфиксная - увеличение после использования

...

int result, arg=2;

result = arg++;

после выполнения result примет значение 2.

-- уменьшение на единицу (декремент или автоуменьшение), также префиксная и постфиксная формы.

sizeof операция вычисления размера операнда (в байтах)

sizeof(char) = 1

sizeof(long) = 4

short Count; --- sizeof(Count) = 2

Бинарные операции

Делятся на следующие группы:

  1. аддитивные и мультипликативные

  1. сдвигов

  1. поразрядные

  1. операции отношений

  1. логические

  1. выбора компонента сложного объекта

  1. операция "запятая"

  1. скобки в качестве операций

Аддитивные и мультипликативные.

+

бинарный плюс - сложение арифметических операндов или

сложение указателя с целым

-

бинарный минус - вычитание арифметических операндов или

вычитание указателей

*

умножение операндов арифметического типа

/

деление операндов арифметического типа. При целочисленных операндах абсолютное значение результата округляется до целого. 20/3 = 6 и (-20)/3 = -6

%

получение остатка от деления целочисленных операндов (деление по модулю). Знак остатка равен знаку делимого. Например: 14%3 = 2 и (-14)%3 = -2

Один нюанс, который вы должны запомнить.

float res;

res = 5/4;

Результат: res = 1.

Для того, чтобы посчитать "правильно", этот фрагмент программы должен быть

float res;

res = 5./4.;

Результат: res = 1.25.

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

<< сдвиг влево битового представления левого операнда на число позиций равное значению правого операнда.

short res, Value = 12;

res = Value << 5;

12=0000 0000 0000 1100 - после операции 0000 0001 1000 0000 =0x180=256+128 = 384

12 * 25 = 12 * 32 = 384

>> сдвиг вправо битового представления левого операнда на число позиций равное значению правого операнда.

short res, Value = 1120;

res = Value >> 5;

1120 = 1024 + 96 = 1024 + 64 + 32 = 210 + 26 + 25 = 0000 0100 0110 0000

- после операции 0000 0000 0010 0011 =0x23=32+3 = 35

1120 / 25 = 1120 / 32 = 35

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

Выполняются над битовыми представлениями значений целочисленных операндов

&

поразрядная конъюнкция (И)

|

поразрядная дизъюнкция (ИЛИ)

^

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

Операция конъюнкция 0&0 = 0 1&0 = 0 0&1 = 0 1&1 = 1

Операция дизъюнкция 0&0 = 0 1&0 = 1 0&1 = 1 1&1 = 1

Операция поразрядное исключающее ИЛИ 0&0 = 0 1&0 = 1 0&1 = 1 1&1 = 0

Пример.

0000 0001 1100 1110

0110 0111 0110 1010

--------------------------

0000 0001 0100 1010 (&)

0110 0111 1110 1110 (|)

0110 0110 1010 0100 (^)

Операции отношений (сравнения).

<

меньше, чем

>

больше, чем

<=

меньше или равно, чем

>=

больше или равно, чем

==

Равно

!=

не равно

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

Результат операции целочисленный: 0 (ложь) или 1 (истина).

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

&& конъюнкция (И) арифметических операндов или отношений

|| дизъюнкция (ИЛИ) арифметических операндов или отношений

Результат 0 (ложь) или 1 (истина).

Примеры отношений и логических операций:

4 < 9 → 1

3 == 5 → 0

3 != 5 || 3==5 → 1

(3+4>5) && (3+5>4) && (4+5>3) → 1

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

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

Существует одна простая операция присваивания и ряд составных.

Простое присваивание -

А = B*2; - присвоить переменной А результат вычисления выражения B*2.

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

X = XÅY; - тоже в записи составного присваивания X Å=Y;

В качестве символа Å могут быть использованы знаки операций: + - * / % << >> & | ^

Примеры. f += 5; d -=f*2; con ^=0xff71;

Операции выбора компонентов структурированного объекта.

Существует две операции (. и ->) которые мы будем рассматривать позже, вместе с определением самих структурированных объектов.

Запятая в качестве операции.

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

int x,y; y = (x=3, 3*x); (после операции х=3, y=9).

Скобки в качестве операций.

Круглые и квадратные скобки играют роль бинарных операций при вызове функций и индексировании элементов массивов.

Круглые скобки обязательны в обращении к функции:

<имя функции> ( <список аргументов> )

где операндами служат <имя функции> и <список аргументов>.

Квадратные скобки используются в выражении

<имя массива> [<индекс>]

здесь операнды <имя массива> и <индекс>

Условная операция (?:). Эта операция тернарная, то есть имеет три операнда. Ее формат:

операнд_1 ? операнд_2 : операнд_3

Первый операнд может иметь арифметический тип или быть указателем. Он оценивается с точки зрения его эквивалентности нулю (операнд, равный нулю, рассматривается как false, не равный нулю — как true). Если результат вычисления операнда 1 равен true, то результатом условной операции будет значение второго операнда, иначе — третьего операнда. Вычисляется всегда либо второй операнд, либо третий. Их тип может различаться. Условная операция является сокращенной формой условного оператора i f (он рассмотрен на с. 40).

#include <stdio h>

int main(){

int a = 11, b = 4, max;

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

printf( "Наибольшее число. %d", max);

return 0; }

Результат работы программы:

Наибольшее число 11

Другой пример применения условной операции. Требуется, чтобы некоторая целая величина увеличивалась на 1, если ее значение не превышает п, а иначе принимала значение 1:

i = (i < n) ? i + 1: 1,

Приоритет операций. Порядок вычисления выражений.

Сейчас мы рассмотрели весь набор операций языка С. И остался не решенным такой вопрос: в какой последовательности применяются записанные в выражении операции?

Что будет результатом вычисления 4 + 3 * 5 ? 35 или 19?

Очевидно, предполагая определение языка С как "удобного" мы вправе ожидать получения 19. Однако откуда это следует?

Да, действительно результат будет 19 и следует это из системы приоритетов операций языка С. Каждой операции языка приписан определенный приоритет выполнения (ранг) и операции выполняются в порядке увеличения ранга: в первую очередь операции с приоритетом 1, потом 2 и т.д.

Если операций одного ранга в выражении несколько, то они выполняются в соответствии с правилом ассоцмативности либо слева направо (à), либо справа налево (ß). Если какой-либо знак операции появляется в таблице дважды (например *), то его первое вхождение (меньший ранг) соответствует унарной операции.

Составим таблицу приоритетов операций.

Ранг

Операции

1

( ) [ ] -> .

2

! ~ + - ++ -- & * (тип) sizeof

3

* / % (мультипликативные бинарные)

4

+ - (аддитивные бинарные)

5

<< >> (операции поразрядного сдвига)

6

< <= >= > (отношения)

7

== != (отношения)

8

& ( поразрядная конъюнкция "И")

9

^ ( поразрядное исключающее "ИЛИ")

10

| ( поразрядная дизъюнкция "ИЛИ")

11

&& ( логическая операция "И")

12

|| ( логическая операция "ИЛИ")

13

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

14

= += -= *= /= %= &= |= ^= <<= >>= (присвоения)

15

, (операция "запятая")

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

Функция

Выполняемые действия

Abs(n)

Возвращаемый модуль целого числа

fabs (x)

Возвр. модуль вещественного числа

acos(x)

asin(x)

atan (x)

atan 2(x)

Arcos x

Arsin x

Arctg x

Возвращаем arctg x/y

cos(x)

sin(x)

tan(x)

exp(x)

log(x)

log10(x)

pow(x,y)

sqrt(x)

floor()

ceil

fmod(x,y)

modf

Cos x

Sin x

Tag x

Степень числа е

Натуральный логарифм

Логарифм по основанию 10

Возводит число в степень

Квадратный корень из числа

Округляет вниз

Округляет вверх

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

разбивает число на целую и дробную часть

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