3.3
.docx
МИНИСТЕРСТВО ОБРАЗОВАНИЯ И НАУКИ РОССИЙСКОЙ ФЕДЕРАЦИИ ФЕДЕРАЛЬНОЕ ГОСУДАРСТВЕННОЕ БЮДЖЕТОЕ ОБРАЗОВАТЕЛЬНОЕ УЧРЕЖДЕНИЕ ВЫСШЕГО ПРОФЕССИОНАЛЬНОГО ОБРАЗОВАНИЯ «Белгородский Государственный Технологический Университет им. В.Г. Шухова» (БГТУ им. В.Г. Шухова) ИИТУС, Кафедра ТК |
|||
«Программирование и основы алгоритмизации» |
|||
Лабораторная работа № 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; получены навыки работы с отдельными разрядами целочисленных объектов. Получены навыки по отладке и тестированию программ; освоение числовых типов и действий над ними.
-