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

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++ для каждого имени должно быть ровно одно определение. Объявлений же может быть несколько. Все объявления некой сущности должны согласовываться по типу этой сущности.

Объявления и определения, записанные внутри какого-либо блока, называются внутренними илилокальными. Объявления и определения, записанные за пределами всех блоков, называются внешними илиглобальными.