
- •1.4.2 Типы и размеры данных в Си
- •1.4.3 Константы
- •1. Целые константы
- •2. Константа действительна
- •3. Символьная константа
- •4. Строчная константа
- •5. Константный выражение
- •Тема 2. Декларации
- •Тема 3. Операторы
- •3.2 Операторы отношений и сравнение на равенство
- •3.5 Операторы присваивания
- •3.5.1 Самый оператор присваивания
- •3.5.2 Другие операторы присваивания Сi
- •3.6 Iнкрементнi и декрементнi операторы
- •Тема 4. Управление
- •4.3 Переключение switch
- •4.4 Цикл While
- •4.5 Цикл for
- •4.6 Операция "," (запятая)
- •4.7 Цикл do - while
- •4.8 Инструкция break
- •4.9 Сontinue
- •4.10 Переходы и метки
- •Тема 5. Указатели и массивы
- •5.1 Указатели
- •5.2 Связь указателей и массивов
- •5.3 Связь между адресной арифметикой и индексированием массивов
- •5.4 Различие между именем массива и указателем (в роли именi массива)
- •5.5 Буквенные указатели
- •5.6 Массивы указателей
- •5.11 Функции проверки свойств символов
- •5.12 Функции преобразования строк
3.5.2 Другие операторы присваивания Сi
Другие операторы присваивания Си имеют вид:
<e1> <op> = <e2>
где <e1>, <e2> - выражения; <op> - бинарный оператор.
Это операторы:
+ = / = <<= & =
-=% =>> = | =
*=
Пример 10:
x = 15 x8 = 015;
y = 8 y8 = 07;
z = 5 z8 = 05;
x + = 2; / * x = 17 * /
y -= 7; / * y = 1 * /
z * = 4; / * z = 20 * /
z / = 2; / * z = 10 * /
z% = 3; / * z = 3 * /
x8 <<= 2; / * x8 = 064 * /
y8>> = 1; / * y8 = 03 * /
z8 & = 01; / * z8 = 01 * /
x8 | = 03; / * x8 = 067 * /
x8 ^ = 07; / * x8 = 060 * /
! Внимание
x * = a + b = x = x * (a + b)
! = x = x + a + b
Второе выражение используется как один операнд. Все операторы присваивания - правоасоциативнi .
3.6 Iнкрементнi и декрементнi операторы
-Унарнi операторы
-
iнкрементний + + (добавляет 1 к своего операнда);
-
декрементний - (отнимает 1 из операнда);
Эти операторы могут быть в двух позициях:
1.Префiксний iнкремент или декремент
Префiксний + + (-) увеличивает (уменьшает) операнд до его использования .
2. Постфiксний
Постфiксний + + (-) увеличивает (уменьшает) операнд после его использования .
Пример 11:
x = 2;
y = x + +; / * y = x, x + 1; y = 2, x = 3 * /
x = 2; z = + + x; / * x + = 1, z = x; x = 3, z = 3 * /
Можно применять к переменной, но не до выражений.
Пример 12:
j + +; - i / * верно * /
(i + j) + +; / * неверно * /
3.7 Оператор ? (условное выражение)
Синтаксис: <E1>? <E2>: <E3>
Семантика:
1. обчилюеться <E1>;
2. если <E1> = "истина", то значение оператора = E2, иначе = E3.
Пример 13:
Ci:
если x> y то
z = X Z = (x> y)? x: y;
иначе
z = y
Пример 14:
abs_x = (x> 0)? x: - x;
3.8 Преобразование типов
Преобразование (приведение) выполняется тогда, когда у оператора операнды имеют разные типы.
Результаты - некий общий тип данных.
3.8.1 Для бинарных операторов
а) если long double, то long double;
б) если double, то double;
в) если float, то float;
г) если short, int то int;
д) если long, то long;
3.8.2 Для присваивания
Значение правой части приводится к типу левой части => это тип результата.
а) char -> int: размножение знака;
б) int -> short
int -> char
long -> short отбрасывания старших разрядов;
long -> int
long -> char
в) float -> int
int -> float
г) doubl -> float: округлением / отвержением.
3.8.3 При вызове функций.
Будет рассмотрен в теме «Функции».
3.8.4 Явное задание приведения:
оператор (<тип>)
- Унарный
- Префiксний
- Правоасоциативний.
Синтаксис:
(Имья_типу) e (где е - выражение)
Семантика:
<Е> приводится к <типа>
Пример 15:
int x = 16; double y;
...
y = sqrt ((double) x);
Пример 14:
int x = 16;
...
y = (int) sqrt ((double) x);
3.9 Приоритеты и асоциативнiсть операторов.
В таблице:
-
Операторы, содержащиеся в одной строке, имеют одинаковый приоритет.
-
Строки отсортованi по убыванию приоритета
-
Л
- выполнение слева направо, П - исполнение справа налево