
- •5.Препроцессор. Директивы препроцессора.
- •7.Работа с файлами. Текстовый и двоичный режим.
- •8.Указатели. Адресная арифметика.
- •10.Перечислимый тип. Структуры. Объединения.
- •11.Поразрядные операции.
- •13.Спецификаторы класса памяти.
- •14.Пространства имён.
- •15.Компоновка. Правило одного определения.
- •16.Понятие класса.
- •17.Функции-члены класса. Указатель this.
- •18.Конструкторы. Деструкторы.
- •19.Преобразования объектов класса.
- •20.Доступ к членам класса.
- •21.Статические члены класса.
- •22.Друзья класса.
- •23.Совместное использование.
- •24.Перегрузка операций.
- •25.Шаблоны.
- •26.Обработка исключительных ситуаций.
- •27.Производные классы.
- •28.Виртуальные функции. Абстрактные классы.
- •29.Указатели на члены класса.
- •30.Множественное наследование.
- •31.Структура dll-библиотеки.
- •32.Статическое и динамическое подключение dll-библиотек.
- •34.Регистры процессора.
- •35.Использование стека. Команды работы со стеком в языке ассемблера.
- •36.Арифметические команды в языке ассемблера.
- •37.Команды сравнения и перехода в языке ассемблера.
- •38.Команды работы с битами в языке ассемблера.
- •39.Процедуры в языке ассемблера. Передача параметров в процедуру.
- •40.Процедуры в языке ассемблера. Возврат результата. Локальные данные.
11.Поразрядные операции.
Если число знаковое (signed), то самый левый его бит обозначает знак числа – 0 для положительных чисел и 1 для отрицательных чисел, остальные биты формируют модуль числа (это относится только к целым числам, вещественные числа всегда со знаком). Если число беззнаковое (unsigned), то все биты участвуют в формировании значения, но число может быть только положительным.Положительные целые числа в компьютере представляются в нормальном коде – это обычное представление числа в двоичной системе, а отрицательные – в дополнительном коде. Существуют операции, которые работают с битами – можно взять отрицание, применить операции «И» или «ИЛИ». Поразрядные операции применяются к перечислениям и интегральным типами – bool, char, short,int и long (возможно, с модификатором unsigned). Однако нельзя применить эти операции к одному биту, а можно лишь применить одну и ту же операцию ко всем битам переменной.
Операции «отрицание» ~, «и» &, «или» |, «исключающее или» ^
Операции сдвига вправо и сдвига влево сдвигают биты в переменной на заданное количество позиций. Существует три разновидности сдвига:
логический – освобождающиеся биты заполняются нулями как при сдвиге вправо, так и при сдвиге влево;
арифметический – при сдвиге влево освобождающиеся символы заполняются нулями, при сдвиге вправо освобождающиеся биты заполняются значением знакового (самого левого) бита;
циклический – выдвигаемые биты перемещаются на место освобождающихся.
В языке Ассемблер существуют все три разновидности сдвига, в языке C++,однако, существует только одна операция сдвига влево и одна операция сдвига вправо.При сдвиге влево разницы между арифметическим и логическим сдвигом нет.При сдвиге вправо,если переменная объявлена как беззнаковая (unsigned),выполняется логический сдвиг,если же переменная объявлена как знаковая,выполняется арифметический сдвиг.
int a; unsigned int b; a = a << 2;(Сдвиг влево, эквивалентен умножению на 4) a >>= 2;(Арифметический сдвиг вправо, деление на 4) b >>= 3;(Логический сдвиг вправо, деление на 8)
12.Время жизни и область действия.
Время жизни переменной может быть глобальным и локальным. Переменная с глобальным временем жизни характеризуется тем, что в течение всего времени выполнения программы с ней ассоциирована ячейка памяти и значение. Переменной с локальным временем жизни выделяется новая ячейка памяти при каждом входе в блок, в котором она определена или объявлена. Время жизни функции всегда глобально.
Область видимости объекта (переменной или функции) определяет, в каких участках программы допустимо использование имени этого объекта.
Область видимости имени начинается в точке объявления, точнее, сразу после объявителя, но перед инициализатором. Поэтому допускается использование имени в качестве инициализирующего значения для себя самого.
Это допустимо, но не разумно.
Прежде чем имя может быть использовано в программе на C++, оно должно быть объявлено (иметьобъявление), т.е. должен быть указан тип имени, чтобы компилятор знал, на сущность какого вида ссылается имя. Определение не только связывает тип с именем, но и определяет некоторую сущность, которая соответствует имени. В программе на C++ для каждого имени должно быть ровно одно определение. Объявлений же может быть несколько. Все объявления некой сущности должны согласовываться по типу этой сущности.
Объявления и определения, записанные внутри какого-либо блока, называются внутренними илилокальными. Объявления и определения, записанные за пределами всех блоков, называются внешними илиглобальными.