Стивен Прата - Язык программирования C. Лекции и упражнения (6-е изд.) 2015

Тут можно читать онлайн Стивен Прата - Язык программирования C. Лекции и упражнения (6-е изд.) 2015 - бесплатно полную версию книги (целиком) без сокращений. Жанр: Прочая старинная литература, издательство Вильямс, год 0101. Здесь Вы можете читать полную версию (весь текст) онлайн без регистрации и SMS на сайте лучшей интернет библиотеки ЛибКинг или прочесть краткое содержание (суть), предисловие и аннотацию. Так же сможете купить и скачать торрент в электронном формате fb2, найти и слушать аудиокнигу на русском языке или узнать сколько частей в серии и всего страниц в публикации. Читателям доступно смотреть обложку, картинки, описание и отзывы (комментарии) о произведении.

Стивен Прата - Язык программирования C. Лекции и упражнения (6-е изд.) 2015 краткое содержание

Язык программирования C. Лекции и упражнения (6-е изд.) 2015 - описание и краткое содержание, автор Стивен Прата, читайте бесплатно онлайн на сайте электронной библиотеки LibKing.Ru

Язык программирования C. Лекции и упражнения (6-е изд.) 2015 - читать онлайн бесплатно полную версию (весь текст целиком)

Язык программирования C. Лекции и упражнения (6-е изд.) 2015 - читать книгу онлайн бесплатно, автор Стивен Прата
Тёмная тема
Сбросить

Интервал:

Закладка:

Сделать

Вдобавок в С имеются операции сдвига влево (<<) и вправо (>>). Каждая из них создает значение, формируемое путем сдвига битов (влево или вправо) левого операнда на количество позиций, указанное в правом операнде. При операции сдвига влево освобождаемые биты устанавливаются в 0. При операции сдвига вправо освобождаемые биты устанавливаются в 0 для значений без знака. Для значений со знаком поведение операции сдвига вправо зависит от реализации.

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

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

Вопросы для самоконтроля

Ответы на вопросы для самоконтроля приведены в приложении А.

1. Преобразуйте следующие десятичные значения в двоичную форму:

а. 3

б. 13

в. 59

г. 119

2. Преобразуйте следующие двоичные значения в десятичную, восьмеричную и

шестнадцатеричную форму:

а. 00010101

б. 01010101

в. 01001100

г. 10011101

3. Вычислите следующие выражения; предположите, что каждое значение имеет

8 битов:

Язык программирования C Лекции и упражнения 6е изд 2015 - изображение 483

Манипулирование битами 657

4. Вычислите следующие выражения; предположите, что каждое значение имеет 8 битов:

а. ~0

б. ! О

в. 2 & 4

г. 2 && 4 Д. 2 | 4

е. 2||4

ж. 5 << 3

5. Поскольку в ASCII-коде используются только последние 7 битов, иногда желательно маскировать остальные биты. Как будет выглядеть подходящая маска в двоичной форме? В десятичной? В восьмеричной? В шестнадцатеричной?

6. В листинге 15.2 следующий код

while (bits-- > 0)

{

mask |= bitval; bitval <<= 1;

}

можно заменить таким фрагментом:

while (bits-- > 0)

{

mask += bitval; bitval *= 2;

}

и программа по-прежнему будет работать. Означает ли это, что действие *= 2 эквивалентно <<= 1? А как насчет | = и +=?

7. а. Компьютер Tinkerbell содержит в специальном байте информацию, касающу

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

Подобно IBM PC компьютер Tinkerbell заполняет битовые поля структуры справа - фото 484

Подобно IBM PC, компьютер Tinkerbell заполняет битовые поля структуры справа налево. Создайте шаблон битовых полей, подходящий для хранения информации.

б. Компьютер Klinkerbell, ближайший клон Tinkerbell, заполняет битовые ноля структур слева направо. Создайте соответствующий шаблон битовых нолей для системы Klinkerbell.

658 глава 15

Упражнения по программированию

1. Напишите функцию, которая преобразует строку с двоичным представлением в числовое значение. Другими словами, если есть

char * pbin = "01001001";

то переменную pbin можно передать этой функции в качестве аргумента, и функция должна возвратить значение 2 5 типа int.

2. Напишите программу, которая читает две строки с двоичным представлением как аргументы командной строки и выводит результаты применения операции ~ к каждому числу, а также результаты применения операций &, | и ^к паре чисел. Отобразите результаты в виде двоичных строк. (Если среда командной строки недоступна, обеспечьте в программе интерактивный ввод строк.)

3. Напишите функцию, которая принимает аргумент типа int и возвращает количество включенных битов в нем. Протестируйте функцию в какой-нибудь программе.

4. Напишите функцию, которая принимает два аргумента типа int: значение и позицию бита. Функция должна возвращать 1, если бит в этой позиции равен 1, и О в противном случае. Протестируйте функцию в какой-нибудь программе.

5. Напишите функцию, которая циклически сдвигает биты значения типа unsigned int на указанное количество позиций влево. Например, функция rotate l (х, 4) перемещает биты значения х на четыре позиции влево, при этом утраченные слева биты воспроизводятся в правой части комбинации. Другими словами, вытесненный старший бит помещается в позицию младшего бита. Протестируйте функцию в какой-нибудь программе.

6. Разработайте структуру битовых полей, которая содержит следующую информацию:

• Идентификатор шрифта: число от 0 до 255

• Размер шрифта: число от 0 до 127

• Выравнивание: число от 0 до 2, представляющее опции выравнивания влево, по центру и вправо

• Полужирный: отключен (0) или включен (1)

• Курсив: отключен (0) или включен (1)

• Подчеркнутый: отключен (0) или включен (1)

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

Манипулирование битами 659 Введите размер шрифта 0127 36 Чтобы - фото 485

Манипулирование битами 659

Введите размер шрифта (0-127) : 36

Чтобы обеспечить преобразование вводимых значений идентификатора и размера - фото 486

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

7. Напишите программу с таким же поведением, как в упражнении 6, но используйте для хранения информации о шрифте переменную типа unsigned long, а для манипулирования этой информацией — побитовые операции вместо членов струк туры с битовыми полями.

16

Препроцессор и библиотека С

В ЭТОЙ ГЛАВЕ...

• Директивы препроцессора: #define, #include, #ifdef, #else, tendif, #ifndef, #if, #elif, #line, #error, #pragma

• Ключевые слова: _Generic, _Noreturn, _Static_assert

• Функции/макросы: sqrt(), atan(), atan2(), exit(), atexit(), assert(), memcpy(), memmove(), va_start(), va_arg(), va_copy(), va_end()

• Дополнительные возможности препроцессора С

• Функциональные макросы и условная компиляция

• Встраиваемые функции

• Библиотека С и ее некоторые удобные функции

662 Глава 16

Я

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

Препроцессор, согласно своему названию, анализирует программу до ее компиляции. Следуя указанным директивам, препроцессор заменяет символические сокращения в программе сущностями, которые они представляют. По вашему запросу препроцессор может включать другие файлы, и вы можете выбирать, какой код будет видеть компилятор. Препроцессору ничего не известно о языке С. По существу он преобразует один текст в другой. Правда, такое описание не дает точного представления об истинной пользе и значимости препроцессора, поэтому давайте перейдем к примерам. Вы уже неоднократно встречали директивы #define и #include. Теперь можно объединить и расширить полученные знания.

Читать дальше
Тёмная тема
Сбросить

Интервал:

Закладка:

Сделать


Стивен Прата читать все книги автора по порядку

Стивен Прата - все книги автора в одном месте читать по порядку полные версии на сайте онлайн библиотеки LibKing.




Язык программирования C. Лекции и упражнения (6-е изд.) 2015 отзывы


Отзывы читателей о книге Язык программирования C. Лекции и упражнения (6-е изд.) 2015, автор: Стивен Прата. Читайте комментарии и мнения людей о произведении.


Понравилась книга? Поделитесь впечатлениями - оставьте Ваш отзыв или расскажите друзьям

Напишите свой комментарий
x