Скачиваний:
28
Добавлен:
16.01.2016
Размер:
90.63 Кб
Скачать

МИНИСТЕРСТВО ОБРАЗОВАНИЯ И НАУКИ РОССИЙСКОЙ ФЕДЕРАЦИИ

ФЕДЕРАЛЬНОЕ ГОСУДАРСТВЕННОЕ БЮДЖЕТОЕ ОБРАЗОВАТЕЛЬНОЕ УЧРЕЖДЕНИЕ

ВЫСШЕГО ПРОФЕССИОНАЛЬНОГО ОБРАЗОВАНИЯ

«Белгородский Государственный Технологический Университет им. В.Г. Шухова»

(БГТУ им. В.Г. Шухова)

ИИТУС, Кафедра ТК

«Программирование и основы алгоритмизации»

Лабораторная работа № 3.3

«Обработка числовой информации. Применение побитовых операций»

Выполнил: студент УС-11

Половнёв Г.К

Проверил: ст. преподават.

Крюков А.В.

Отметка о выполнении

дата, роспись

Отметка о защите

дата, роспись

Вариант №20

Цель работы: изучение побитовых логических операций и операций сдвига языка Pascal, C; получить навыки работы с отдельными разрядами целочисленных объектов; кодирование алгоритмов разветвляющейся и циклической структуры, отладки и тестирования программ освоение числовых типов данных и действий над ними.

ЗАДАЧА 1

Постановка задачи: По введенному числу (в двоичной системе счисления) представляющего собой упакованную заданную структуру, формирует из нее составные ее части и выводит их на экран (в виде десятичного и двоичного числа). Структура данных приведена в таблице с вариантами.

Формулировка задания:

Текст программы (PascalABC.net):

var

O, A, R, D: word; // отдельные части данных

bit : 0..1;

rez : word;

rez2 : word;

i : 0..15; // номер бита

BEGIN

Writeln('Введите составные части стрктуры данных:');

Write(' (O=(1/0)) 0 = ');

readln(O);

Write(' (0<=A<=3) A = ');

readln(A);

Write(' (0<=R<=7) R = ');

readln(R);

Write(' (0<=S<=255) D = ');

readln(D);

if (O <= 1) and (O >= 0) and (A <= 3) and (A >= 0)

and (R <= 7) and (R >= 0) and (D >= 0) and (D <= 255) then

begin

rez := (O shl 15) or (A shl 13) or (R shl 10) or 256 or D ;

// формирование упакованной структуры

writeln;

Writeln('Упакованная структура данных имеет вид:');

Writeln(' OAARRR01DDDDDDDD');

Write(' ');

// Запись rez в двоичной СС

for i := 15 downto 0 do

begin

bit := (rez shr i) and 1;

write(bit)

end;

Write(' = ', rez)

end

else Write('Некорректно введены данные');

readln;

END.

Пример работы программы:

ЗАДАЧА 2

Постановка задачи: Для данного однобайтового числа выполнить циклическую перестановку его битов по следующему алгоритму: «начальный бит имеет номер (индекс), равный 0. Бит с индексом 0 перемещается в бит с индексом 2, бит с индексом 2 перемещается в бит с индексом 1, бит с индексом 1 перемещается в бит с индексом 3, бит с индексом 3 перемещается в бит с индексом 0. Для второй половины байта (для битов с номерами 4-7) перестановка выполняется аналогично».

Текст программы:

Var

a : byte; //Исходное число

rez : byte; //Преобразованное число

i, k : 0..8;

m : byte;

bit : 0..1;

BEGIN

write('Введите исходное однобайтовое число: ');

readln(a);

write('Исходное число ДО преобразования: ', a, ' = ');

// Запись исходного числа в двоичной СС

For i:=7 downto 0 do

begin

bit := (a shr i) and 1;

write(bit)

end;

rez:=(a and 51) shl 2; //51=00110011

rez:=rez or ((a shr 1) and 34); //34=00100010

rez:=rez or ((a shr 3) and 17); //17=00010001

writeln;

write('Исходное число ПОСЛЕ преобразования: ',rez, ' = ');

// Запись числа rez в двоичной СС

For i:=7 downto 0 do

begin

bit := (rez shr i) and 1;

write(bit)

end;

readln;

END.

Пример работы программы:

Ответы на контрольные вопросы.

Вопрос №11. Как происходит установка/сброс отдельных битов в целом числе? Как происходит формирование маски числа при таких операциях? Приведите соответствующие примеры.

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

Обнуление крайних битов с помощью маски:

Исходное число: 11111111

Маска: 00111100

Обнуление крайних бит с помощью логического сдвига:

Исходное число: 11111111

Логический сдвиг: A shl 2 и A shl 2

Вопрос №18. Поясните понятия: «циклический сдвиг», «логический сдвиг», «арифметический сдвиг». Приведите примеры данных операций для одного и того же числа.

1) Логический сдвиг: Сдвиг, при котором уходящий бит исчезает, не влияя на оставшиеся биты, а на месте появившегося бита записывается бит 0

2) Арифметический сдвиг: При этом сдвиге слово рассматривается не просто как группа битов, а как целое число в дополнительном коде. При сдвиге влево ведёт себя как логический сдвиг, при сдвиге вправо уходящий бит исчезает, не влияя на оставшиеся биты, а на месте появившегося бита устанавливается бит, соответствующий знаку.

3) Циклический сдвиг: При этом сдвиге уходящий бит появляется на месте появившегося свободного на другом конце числа.

Примеры:

Логический сдвиг: (1111) shl 2=1100

Арифметический сдвиг вправо:

Исходное число: 00010111

После сдвига:00001011

Циклический сдвиг вправо на 2:

Исходное число: 1011

После сдвига: 1110

Вывод: Были изучены побитовые логические операции и операции сдвига языка Pascal; получены навыки работы с отдельными разрядами целочисленных объектов. Получены навыки по отладке и тестированию программ; освоение числовых типов и действий над ними.

-5-

Соседние файлы в предмете Алгоритмические языки и основы программирования