Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
1 Типы, операции и выражения.docx
Скачиваний:
1
Добавлен:
01.07.2025
Размер:
83.7 Кб
Скачать
  1. Операции инкрементирования и декрементирования.

Вызывают соответственно увеличение и уменьшение значения выражения на 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++ различны.

  1. ПОРАЗРЯДНЫЕ (ПОБИТОВЫЕ) ОПЕРАЦИИ В ЯЗЫКЕ С.  Поразрядные (побитовые) операции можно производить с любыми целочисленными переменными и константами. Эти действия не применимы к переменным типа 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.