русс | укр

Языки программирования

ПаскальСиАссемблерJavaMatlabPhpHtmlJavaScriptCSSC#DelphiТурбо Пролог

Компьютерные сетиСистемное программное обеспечениеИнформационные технологииПрограммирование

Все о программировании


Linux Unix Алгоритмические языки Аналоговые и гибридные вычислительные устройства Архитектура микроконтроллеров Введение в разработку распределенных информационных систем Введение в численные методы Дискретная математика Информационное обслуживание пользователей Информация и моделирование в управлении производством Компьютерная графика Математическое и компьютерное моделирование Моделирование Нейрокомпьютеры Проектирование программ диагностики компьютерных систем и сетей Проектирование системных программ Системы счисления Теория статистики Теория оптимизации Уроки AutoCAD 3D Уроки базы данных Access Уроки Orcad Цифровые автоматы Шпаргалки по компьютеру Шпаргалки по программированию Экспертные системы Элементы теории информации

Задачи и упражнения.

1. Пусть int a=170. Определить результат:

а) r = a & 15;

б) r = a | 8;

в) if (a & 8 = = 8) cout<<” Yes”; else cout<<”No”;

Решение. Число 170 переводим в шестнадцатеричную систему счисления делением на 16. Получим 17010=AA16. Каждую шестнадцатеричную цифру запишем в виде двоичной тетрады и добавим необходимое количество незначащих нулей. Получим 00000000000000000000000010101010.

a) 1510 = 11112. Учитывая правила выполнения операции &, получим десятичное число 10 или шестнадцатеричное A, т. е. с помощью этой операции всегда выделяется последняя шестнадцатеричная цифра числа.

б) Так как 810=10002 и принимая во внимание правила выполнения операции | (битовое или), получим то же число 170.

в) Так как в двоичном представлении числа 8 есть всего одна единица, то результатом операции a & 8 будет либо 0, либо 8 =10002 в зависимости от того, что находится в 3–м справа бите числа a (нумерация битов с нуля). В нашем примере получим 8, и будет выведено “YES”, что означает, что в 3–м справа бите исходного числа a была единица.

i. 2. Определить результат:

unsigned short a; cin>>a;

a=a & 0xFFF7; cout<<a;

Решение. Введем, например, число 26. В двоичной системе счисления это 0000000000011010.

Так как FFF716=11111111111101112, то операция &(битовое и) оставит без изменения все биты, кроме третьего справа. Независимо от того, что было в этом бите (0 или 1), получится нуль, т. е. мы “выключили” третий справа бит. В результате получим 00000000000100102=18, т. е. будет выведено число 18. Если введем, например, число 23, то это число не изменится, так как в третьем бите был 0.

3. Упаковка информации. Пусть по условию задачи известно, что числа массива находятся в диапазоне от 0 до 15, т. е. каждое число занимает четыре бита. Надо обработать 20 таких чисел. Нет типа данных для хранения четырех битов. В каждом элементе массива типа unsigned short размером два байта (16 битов) можно разместить 16/4=4 числа из указанного диапазона. Поэтому для хранения 20 таких чисел понадобится массив из 20/4=5 элементов. 20 введенных чисел из диапазона 0..15 записать в массив типа unsigned short размерности 5.

unsigned short MyINP( unsigned short myMAX);

int main()

{ const int k=4, // размерность числа 0..15 4 бита

n=20, // количество чисел

size=n*k/(sizeof(unsigned short)*8); // размерность массива

unsigned short number, array[size];

for (int i=0;i<size;i++)

for(int j=1;j<=k;j++)

{ number=MyINP(15);

array[i]=(array[i]<<k) | number;

}

for (int i=0; i<size;i++)

// вывод в шестнадцатеричной системе счисления пяти

// шестнадцатеричных цифр

printf("%X ",array[i]);

getch(); return 0; }

unsigned short MyINP( unsigned short myMAX)

{ unsigned short x;

while (true) { cin>>x; if (x<=myMAX) return x;

textcolor(4); cprintf("ERROR Repeat");

} }

Функция MyINP вводит целое положительное число, меньшее или равное myMAX. При попытке ввести неположительное или большее myMAX число, красным цветом выводится сообщение об ошибке и приглашение повторить ввод.

4. Пусть int a=-8, b=23. Что получится в результате выполнения следующей части программы:

printf (“%d %X %d %X”, a & b, a | b, a ^ b, ~a).

5. Найти значение переменной r, объявленной как int r, если:

а) r= ~(100>>2) & ~(–10) | 0x10;

б) r=162 | 0x10A & 111;

в) r= –10 & 1|4;

г) r=(123<<4)& 123.

6. Найти значение этого же выражения из предыдущего упражнения, если переменная объявлена как unsigned short r.

7. Пусть в ячейке, объявленной short a, хранится следующая двоичная последовательность:

а) 0000001001001001; б) 1100000000001000;

в) 1111111111111000; г) 1000000000000000.

Что это за число в десятичной системе счисления? шестнадцатеричной системе счисления?

8. Выполнить предыдущее упражнение, если переменная объявлена как unsigned short a.

9. Как включить 4-й справа бит, т. е. поместить туда единицу независимо от того, какое там было значение, нуль или единица? Нумерация битов с нуля.

10. Как заменить значение 2–го справа бита на противоположное значение, т. е. нуль на единицу, а единицу на нуль? Нумерация битов с нуля.

11. С помощью битовых операций вывести на экран:

а) значение k–го справа бита;

б) i–ю справа шестнадцатеричную цифру.

12. Решить задачу упаковки (см. задачу 3) и распаковки, если диапазон чисел следующий: a) 0..1; б) 0..3; в) 0..7. Рассмотреть несколько вариантов объявления массива (unsigned short, char и др.).

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

Указание. Последнюю шестнадцатеричную цифру получаем с помощью операции number & 0xF, или number & 15. Кроме того, на каждом шаге число сдвигаем на четыре разряда. Выделенную шестнадцатеричную цифру с помощью if и switch анализируем и выводим либо цифры от 0 до 9, либо буквы A, B, C, D, E, F.

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

Просмотров: 648


Вернуться в оглавление



Карта сайта Карта сайта укр


Уроки php mysql Программирование

Онлайн система счисления Калькулятор онлайн обычный Инженерный калькулятор онлайн Замена русских букв на английские для вебмастеров Замена русских букв на английские

Аппаратное и программное обеспечение Графика и компьютерная сфера Интегрированная геоинформационная система Интернет Компьютер Комплектующие компьютера Лекции Методы и средства измерений неэлектрических величин Обслуживание компьютерных и периферийных устройств Операционные системы Параллельное программирование Проектирование электронных средств Периферийные устройства Полезные ресурсы для программистов Программы для программистов Статьи для программистов Cтруктура и организация данных


 


Не нашли то, что искали? Google вам в помощь!

 
 

© life-prog.ru При использовании материалов прямая ссылка на сайт обязательна.