- •Имена переменных.
- •Типы данных и их размеры.
- •Подробное описание типов данных в языке си
- •Константы в си.
- •Объявления.
- •Арифметические операции.
- •Операции отношения и логические операции.
- •Преобразование типов данных в си.
- •Операции инкрементирования и декрементирования.
- •Операции с присваиванием и выражения с ними.
- •Условные выражения.
- •Приоритет и порядок вычисления.
Операции инкрементирования и декрементирования.
Вызывают соответственно увеличение и уменьшение значения выражения на 1.
++ - операция инкремента; -- - операция декремента.
Например, вместо i = i +1 можно записать i++ (суффикс) или ++i (префикс), а вместо i = i - 1 можно записать i-- или --i.
Пример.
int i = 3, j, k; j = i++; // Результат i = 4; j = 3 k = --j; // Результат j = 2; k = 2
Однако в выражении ++n переменная инкрементируется до того, как используется, а в выражении n++ — после того. Это означает, что в контексте использования самой переменной, а не только эффекта приращения, выражения ++n и n++ различны.
ПОРАЗРЯДНЫЕ (ПОБИТОВЫЕ) ОПЕРАЦИИ В ЯЗЫКЕ С. Поразрядные (побитовые) операции можно производить с любыми целочисленными переменными и константами. Эти действия не применимы к переменным типа float, double или long double. Результат побитовых операций будут иметь целочисленное значение. К поразрядным операциям относятся следующие операции:
& ( или and ),
| ( или OR ),
^ ( или XOR ),
- ( или NOT ),
сдвиг влево,
сдвиг вправо.
В случае побитной операции сравниваются значения каждой пары битов. Тем самым обеспечивается доступ к битам. Эти операции находят применение в драйверах устройств, программах, связанных с принтером, модемом и другими устройствами. Когда выполняются логические операции над выражениями, то в итоге Вы получаете либо 0, либо 1. Однако в случае поразрядных операций так же выполняются логические действия, но они не имеют результатом обязательно только либо 0, либо 1. Рассмотрим примеры.
1). Пусть ch=ch & 127; Тогда, если ch='A', т.е. 11000001 и число 127 есть 01111111 В итоге будет 01000001 Если соответствующие разряды одинаковы, то в результате имеем 1, иначе имеем 0. Так работает операция "and" или логическое умножение. 2). Пусть ch=ch | 128; Тогда, если ch='A', т.е. 11000001 и число 128 есть 10000000 В итоге будет 11000001 Поразрядные операции удобны для организации хранения в сжатом виде информации о состоянии некоторых переключателей: включен/выключен (on/off). В одном байте можно хранить 8 таких флагов. 3). Пусть ch является хранилищем таких флагов. Проверить, находится ли флаг в третьем бите в состоянии On, можно следующим образом: if (ch & 4) printf("Третий бит содержит 1, состояние On"); Эта проверка основывается на двоичном представлении числа 4: 00000 100 Операции сдвига (влево или вправо) применимы только к целочисленным переменным. При этих операциях сдвигаются все биты левого операнда на число позиций, опеределенных выражением вправа от знака операции сдвига. Операции сдвига обозначаются двойными знаками: << - сдвиг влево и >> - сдвиг вправо. 4). Пусть x = 9, что в двоичном представлении имеет вид: 0000 1001 Тогда x=9<<3 есть код: 01001000; x=9>>3 есть код: 00000001; x=9>>5 есть код: 00000000; Легко заметить, что операция сдвига ведет к потере старших или младщих разрядов. Применение сдвигов << и >> к одной и той же величине может изменить значение этой переменной из-за потери разрядов. 5). Пусть беззнаковая величина unsigned char x=255; Выполним сдвиг влево на 3 разряда и затем так же сдвиг вправо на 3 разряда. Получим: x=255<<3 в двоичном коде будет иметь вид: 11111000; x=11111000>>3 в двоичном коде будет иметь вид: 00011111.
