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

38. Препроцессор, его роль. Директивы препроцессора. Директива #include.

Перед компиляцией программа на языке Си обрабатывается специ­альной программой – препроцессором, который работает под управле­нием директив.

Препроцессорные директивы начинаются с символа #, за которым следует наименование директивы, указывающее текущую операцию препроцессора.

Препроцессор решает ряд задач по предварительной обработке программы, основной из которых является «подключение» к программе так называемых заголовочных файлов (обычных текстов) с декларацией стандартных библиотечных функций, которые используются в программе. Наименование такой директивы: include (подключить), а общий формат ее использования: include <имя_файла.h>где «h» – расширение заголовочных файлов.Если имя файла заключено в угловые скобки (< >), то поиск дан­но­го файла производится в стандартной директории (папке) с этими файлами, если же имя файла заключено в двойные кавычки (” ”), то поиск данного файла производится в текущей директории.: Второе основное назначение препроцессора – это обработка макро­­опре­делений. Макроподстановка define (определить) имеет общий вид:#define < ID > <строка>

Например: #define PI 3.1415927

В ходе препроцессорной обработки программы появление в тексте идентификатора PI везде заменяется значением 3.1415927.

39. Операции сдвига (<<, >>)

Операторы сдвига >> и << сдвигают биты в переменной вправо и влево на указанное число. Общий вид оператора сдвига вправо:переменная >> число сдвигова общий вид оператора сдвига влево:переменная << число сдвигов. Сдвиг — это не то же самое, что и вращение, то есть биты, сдвигающиеся на один конец, не появляются с другого. Сдвинутые биты теряются, а с другого конца появляются нули. В том случае, если вправо сдвигается отрицательное число, слева появляются единицы (поддерживается знаковый бит).Операции битового сдвига могут быть полезны при декодировании информации от внешних устройств  и для чтения информации о статусе. Операторы битового сдвига могут также использоваться для выполнения быстрого умножения и деления целых чисел. Сдвиг влево равносилен умножению на 2, а сдвиг вправо -  делению на 2, как показано в таблице.

40. Поразрядные операции (~, &, ^, | )

Поразрядные операции можно применять только к целочисленным операндам, т.е. к операндам типов charshortint и long, как знаковым так и беззнаковым.

&

— поразрядное логическое И.

|

— поразрядное логическое ИЛИ.

^

— поразрядное ИСКЛЮЧАЮЩЕЕ ИЛИ.

~

— поразрядное отрицание, НЕ (унарный оператор).

Оператор & (поразрядное И) часто используется для обнуления некоторой группы разрядов. Например

n = n & 0177;

обнуляет в n все разряды, кроме младших семи.

Оператор | (поразрядное ИЛИ) применяется для установки отдельных разрядов в 1. Например x = x | SET_ON;

устанавливает в результате единицы в тех разрядах, которым соответствуют единицы в SET_ON.

Оператор ^ (поразрядное ИСКЛЮЧАЮЩЕЕ ИЛИ) в каждый разряд результата запишет 1, если соответствующие разряды операндов имеют различные значения, и 0, когда они совпадают.

Унарный оператор ~ осуществляет поразрядную инверсию своего операнда, преобразуя каждый единичный бит в нулевой и наоборот. Например,x = x & ~077

обнуляет в x последние шесть разрядов. Заметим, что запись x & ~077 не зависит от размера операнда, и, следовательно, она лучше, чем запись x & 0177700, поскольку последняя подразумевает, что x занимает 16 битов. Независимая от типа машины форма записи ~077 не потребует дополнительных затрат времени при работе программы, так как ~077 это константное выражение, вычисляемое во время компиляции.

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