Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
тех прог.doc
Скачиваний:
38
Добавлен:
14.11.2019
Размер:
3.59 Mб
Скачать

Явное приведение типа

Конструкция вида

(ИМЯ_ТИПА)выр

приводит выр к указанному в скобках типу по перечисленным выше правилам. Смысл приведения состоит в том, что выр как бы присваивается некоторой переменной указанного типа и эта переменная используется вместо всей конструкции.

Возможна другая функциональная форма явного приведения типа:

ИМЯ_ТИПА(выр).

Задачи 159-166. Побитовые операторы

  1. Напишите функцию int bitcount(unsigned x), возвращающую число единиц в двоичном представлении величины x. Указание. Создайте величину onebit, имеющую единичку в младшем правом разряде. В цикле сравнивайте побитово x с onebit и сдвигайте onebit на 1 влево, пока onebit не станет 0.

  2. Напишите программу, подсчитывающую число двоичных разрядов, отводимых под данные типа char, int, short, long, unsigned.

  3. Напишите функцию setbits(x, p, n, y), возвращающую значение x, в котором n бит, начиная с p-ой позиции справа, заменены на n правых разрядов из y (остальные биты не меняются).

  4. Напишите функцию invert(x, p, n), возвращающую значение x с инвертированными n битами, начиная с позиции p (остальные биты не изменяются).

  5. Напишите функцию, которая циклически сдвигает влево x на 1 позицию. При этом старший разряд x ставится на место младшего.

  6. Напишите функцию leftrot(x, n), которая циклически сдвигает влево x на n разрядов.

  7. Напишите функцию rightrot(x, n), которая циклически сдвигает вправо x на n позиций.

  8. Применительно к числам, в представлении которых использован дополнительный код, выражение x &= (x-1) уничтожает самую правую 1 в x. Объясните почему. Используйте это наблюдение для более быстрого варианта функции bitcount, подсчитывающей число единиц в двоичном представлении своего аргумента.

Глава 14.Структуры, перечисления, объединения

14.1.Объявление структур

Структура – это одна или несколько переменных, возможно, различных типов, которые сгруппированы под одним именем. Структуры полезны, когда для описания одного объекта требуется несколько данных различных типов, например, при создании электронной записной книжки каждый человек может характеризоваться строкой символов с фамилией и числовым номером телефона.

Для моделирования точек на плоскости, рис.59, можно использовать следующую структуру:

struct point{ // Структура для моделирования точек на плоскости

int x;

int y;

} ;

Рис.60. Точки на плоскости

Здесь struct – это ключевое слово, с которого начинается описание структуры. Идентификатор point – это имя структуры. В фигурных скобках помещается список объявлений членов или полей структуры x и y. Имена членов структуры должны различаться, но могут совпадать с именами других переменных программы.

Объявление структуры является объявлением типа. Имя структуры является именем нового пользовательского типа данных, который можно использовать так же, как имена встроенных типов. Например, чтобы создать переменные структурного типа, нужно записать:

point pt1, pt2, pt3; // Определение трех точек на плоскости

Эта запись аналогична объявлению переменных встроенных типов:

int a, b, c;

Переменные структурного типа могут копироваться, над ними можно выполнять операции присваивания, их можно передавать в функции в качестве аргумента и возвращать из функции в качестве результата.

Структурные переменные можно инициализировать при определении, например,

point nachkoord = {0, 0}, p1 = {1, 1};

Список инициализаторов заключается в фигурные скобки, в качестве инициализаторов можно использовать константы и константные выражения. Локальные переменные структурного типа, определенные внутри функции, можно инициализировать вызовами функций, которые возвращают результат структурного типа.

Доступ к члену структуры осуществляется конструкцией:

ИМЯ_СТРУКТУРЫ.ЧЛЕН

Например, чтобы напечатать координаты точки p1, можно использовать инструкцию:

c out << p1.x <<”, ” << p1.y;

Рис.61. Прямоугольник как совокупность двух точек

Структуры могут быть вложенными друг в друга, например, прямоугольник, рис.62, можно рассматривать как совокупность двух точек, объединенных в одну структуру:

struct rect{ // Прямоугольник

point pt1; // Первая вершина

point pt2; // Вторая вершина

};

Структура rect имеет своими членами две структуры point.

Пусть объявлена структурная переменная:

rect screen;

Выражение screen.pt1.x ссылается на координату x точки pt1 из структуры screen.