|
Программирование >> Структурное программирование
и- fillDeck(deck) deal(deck); return 0; void fillDeck(BitCard *wDeck) for (int 1=0; i <= 51; i++ wDeck[i].face = i % 13; wDeck[i].suit = i / 13; wDeck[i].color = i / 26; ) { Выходные данные для карт представлены в виде двух колонок. Карты 0-25 расположены в первой колонке с индексом kl. Карты 26-51 расположены во второй колонке с индексом к2. void deal(BitCard *wDeck) { for (int kl =0, k2 = kl + 26; kl <= 25; kl++, k2++) { cout << Карта: << setw(3) wDeck[kl] .face << Масть: << setw(2) wDeck[kl].suit wDeck[kl].color cout Карта: setw(3) wDeck[k2: setw(2) wDeck[k2].suit wDeck[k2].color endl; Цвет: setw(2) .face << Масть: Цвет setw(2) Рис. 16.14. Использование битовых полей для хранения колоды карт (часть 2 из 2)
Рис. 16.15. Выходные данные, полученные в результате выполнения программы, приведенной на рис. 16.14 Можно задавать неименованное битовое поле; в этом случае поле используется в структуре как заполнение. Например, описание структуры struct Example { unsigned а : 13; unsigned : 3; unsigned b : 4; использует неименованное 3-х битовое поле как заполнение: ничто не может храниться в этих трех битах. Элемент b (в нашем компьютере машинное слово занимает 2 байта) хранится в другом элементе памяти. Неименованное битовое поле нулевой ширины используется для выравнивания следуюш;его битового поля по границе нового элемента памяти. Например, описание структуры struct Example { unsigned а : 13; unsigned : 0; unsigned b : 4; использует неименованное поле нулевой ширины, чтобы пропустить оставшиеся биты (все, сколько их есть) в том элементе памяти, в котором хранится элемент а, и выровнять элемент b по границе следуюш;его элемента памяти. Замечание по мобильности 16.5 Манипуляции с битовыми полями являются машинно-зависимыми. Например, в некоторых компьютерах битовые поля могут пересекать границы машинного слова, тогда как в других компьютерах это недопустимо. Типичная ошибка программирования 16.9 Попытка осуществить доступ к отдельным битам битового поля как если бы они были элементами массива. Битовые поля не являются массивами битов . Типичная ошибка программирования 16.10 Попытка получить адрес битового поля (операция & не может применяться к битовым полям, поскольку они не имеют адресов). Совет по повышению эффективности 16.3 Хотя битовые поля сокращают требования к памяти, их использование может привести к тому, что компилятор будет генерировать машинный код, который выполняется с низкой скоростью. Это происходит вследствие того, что приходится исполь -зовать дополнительные операции машинного языка для получения доступа к отдельным частям адресуемых элементов памяти. Это является одним из множества примеров необходимости компромисса между требованиями эффективности по памяти и по времени выполнения программы. 16.9. Библиотека обработки символов Большинство данных вводится в компьютеры как символы, включая буквы, цифры и различные специальные символы. В этом разделе мы обсудим возможности языка C-t-I- по исследованию отдельных символов и манипули- рованию ими. Позже в этой главе мы продолжим рассмотрение операций с символьными строками, начатое в главе 5. Библиотека обработки символов включает несколько функций, которые выполняют полезные операции по обработке символьных данных. Каждая из этих функций принимает символ типа int или EOF в качестве аргумента. Часто операции с символами выполняются как операции с целыми значениями. Вспомним, что EOF обычно имеет значение -1 и архитектура некоторых аппаратных средств не позволяет сохранять отрицательные значения в переменных типа char. Поэтому функции обработки символов манипулируют с символами как с целыми. На рис. 16.16 представлены функции библиотеки обработки символов. При применении функций из библиотеки обработки символов необходимо убедиться, что в программу включен заголовочный файл <ctype.h>.
Рис. 16.16. Краткое описание функций из библиотеки обработки символов
|
© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки. |