лаба ит 5
.pdfМИНИСТЕРСТВО ОБРАЗОВАНИЯ И НАУКИ РФ
ФЕДЕРАЛЬНОЕ ГОСУДАРСТВЕННОЕ БЮДЖЕТНОЕ ОБРАЗОВАТЕЛЬНОЕ УЧРЕЖДЕНИЕ ВЫСШЕГО ПРОФЕССИОНАЛЬНОГО ОБРАЗОВАНИЯ
«Белгородский Государственный Технологический Университет им. В.Г. Шухова» (БГТУ им. В.Г. Шухова)
ИИТУС
Кафедра: «Техническая кибернетика»
Лабораторная работа №5
дисциплина: «Информационные технологии» тема: «Кодирование числовой информации.
Применение побитовых операций.»
Выполнил:
студент группы УС-11 Татаринов Алексей
Принял:
ст. препод. кафедры ТК Бушуев Д.А.
Белгород 2014
Содержание
1. |
Цель работы............................................................................................................................... |
3 |
|
2. |
Список индивидуальных заданий ....................................................................................... |
4 |
|
3. |
Выполнение работы................................................................................................................. |
6 |
|
|
3.1 |
Задание 1.............................................................................................................................. |
6 |
|
3.2 |
Задание 2.............................................................................................................................. |
8 |
|
3.3 |
Задание 3.............................................................................................................................. |
9 |
|
3.4 |
Задание 4 ............................................................................................................................ |
11 |
|
3.5 |
Задание 5............................................................................................................................ |
12 |
|
3.6 |
Задание 6............................................................................................................................ |
14 |
Заключение........................................................................................................................................ |
15 |
2
1. Цель работы
Изучение различных числовых форматов целых и вещественных чисел, а также правил выполнения различных арифметических и логических операций над ними.
Применение побитовых операций над числами для проверки определенных свойств числа.
3
2.Список индивидуальных заданий
1)Для данной программы вычислить итоговый результат (в десятичной системе счисления) со всеми расчетами в двоичной системе счисления. Задание выполнить в двух вариантах, в зависимости от типа переменных:
Var |
Var |
a, b, rez : shortint; |
a, b, rez : byte; |
2)Вычислите значение указанного выражения. Вычисления и ответ представить в двоичной системе счисления.
3)Представить заданные вещественные числа А и В в формате с плавающей точкой. Выполнить сложение этих чисел в различных числовых форматах: а) как числа половинной точности, б) как числа двойной точности (см. описание типов). Все стадии решения представить в двоичной системе счисления (или в 16-ой для компактности записи). Оценить погрешность вычисления, взяв за основу истинный результат вычисления.
Вслучае появления ошибки вычисления, аргументировать причины такой ошибки.
4)Для данного целого числа А определенного типа отдельно осуществить
следующие виды битовых сдвигов а) логический б) арифметический в) циклический
со всеми выкладками в двоичной системе счисления. Запишите получившиеся результаты в десятичной системе счисления.
5) Используя арифметические и побитовые операции, осуществите указанные действия, написав необходимую последовательность команд на одном из языков программирования. Привести два примера работы данной программы над разными числами со всеми выкладками в двоичной системе счисления.
Детали реализации:
Во всех таких задачах предполагается, что а) все используемые числа являются однобайтовыми без знаковыми целыми
(если не указано отдельно другое описание числа), б) отсчет бит в байте начинается с единицы, начиная с младшего бита.
в) при описании маски используется следующая интерпретация:
символ «*» означает любую последовательность бит.
6) Для заданного IP адреса и маски подсети рассчитать следующие параметры (см. дополнительную теоретическую часть):
а) адреса хостов в данной подсети (минимальный/максимальный IP), б) адрес подсети, в) число хостов,
г) широковещательный адрес (Broadcast), д) префикс сети.
4
Вариант 9.
Задание 1
begin
a := 13;
a := not a and (a - $13); b := $11;
rez := a - b; writeln(rez);
end.
Задание 2:
1018 : 1012 + 1019∙(10110 – 1018) + 10116
Задание 3:
А = 100,3, В = 201,48.
Задание 4:
А = 46 (a: shortint)
а) на 4 бита влево, б) на 5 бит вправо, в) на 4 бита вправо.
Задание 5:
а) проверить, присутствует ли в данном байте целиком битовая последовательность «111111»,
б) заменить в данном байте отдельные биты так, чтобы данный байт удовлетворял битовой маске «??10??10».
Задание 6:
IP: 148.200.199.250,
маска подсети: 255.255.255.240.
5
3. Выполнение работы
3.1Задание 1.
Для данной программы вычислить итоговый результат (в десятичной системе счисления) со всеми расчетами в двоичной системе счисления. Задание выполнить в двух вариантах, в зависимости от типа переменных:
Var |
|
Var |
a, b, rez : shortint; |
a, b, rez : byte; |
|
begin |
|
|
a := |
13; |
|
a := |
not a and (a - $13); |
|
b := |
$11; |
|
rez := a - b; writeln(rez);
end.
Вариант 1.
При типе данных shortint число должно входить в диапазон от -128 до 127 и занимать 1 байт памяти.
Рассмотрим часть кода нашей программы:
a := 13;
a := not a and (a - $13);
Оператор not делает из числа 13 число -14. Рассмотрим, как выполняется данное преобразование:
1310=11012
Дополним получившееся число до 8 бит:
000011012
Оператор not делает следующую операцию с числом:
not 000011012=111100102=-1410
Рассмотрим оставшийся код:
b := $11; rez := a - b;
В этой части выполняется вычитание из десятичного числа -14 шестнадцатеричного числа 11.
Переведем оба числа в двоичную сс. В результате чего получим:
1116=0000100012 -1410=111100102
Выполним вычитание и переведем результат в десятичную систему счисления:
111100102-100012=111010012=-3110
6
Вариант 2.
При типе данных byte число может принимать значения в диапазоне от 0 до 255 и занимать 1 байт памяти.
Так же рассмотрим фрагмент нашего кода:
a := 13;
a := not a and (a - $13);
При выполнении данного фрагмента происходит преобразование десятичного числа 13 в число 242. Рассмотрим подробнее донный процесс.
Тип данных byte это тип без знака, а, следовательно, число не может принимать отрицательных значений в отличии от типа shortint. И поэтому после оператора not происходит не преобразование данного числа в отрицательное, а как бы его циклический перенос в начало диапазона значений, но так как число не может быть больше 255 то происходит вычитание из максимального значения (255) исходного числа (в нашем случае это 13), в результате чего мы получаем значение 242.
Переведем получившееся число в двоичную систему:
24210=111100102
Рассмотрим оставшийся код:
b := $11;
rez := a - b;
В этой части выполняется вычитание из десятичного числа 242 шестнадцатеричного числа 11.
Переведем оба числа в двоичную сс. В результате чего получим:
1116=0000100012
24210=111100102
Выполним вычитание и переведем результат в десятичную систему счисления:
111100102-100012=111010012=22510
7
3.2 Задание 2.
Вычислите значение указанного выражения. Вычисления и ответ представить в двоичной системе счисления.
1018 : 1012 + 1019∙(10110 – 1018) + 10116
Для выполнения данного задания переведем все числа в двоичную систему счисления:
1018 = 10000012
1012 = 1012
1019 = 10100102
10110 = 11001012
1018 = 10000012
10116 = 1000000012
Выполним все действия в нужной очередности.
1.11001012-10000012=1001002
2.10100102*1001002=1011100010002
3.10000012 / 1012=11012
4.11012+1011100010002=1011100101012
5.1011100101012+1000000012=1100100010012
8
3.3 Задание 3
Представить заданные вещественные числа А и В в формате с плавающей точкой. Выполнить сложение этих чисел в различных числовых форматах: а) как числа половинной точности, б) как числа двойной точности (см. описание типов). Все стадии решения представить в двоичной системе счисления (или в 16-ой для компактности записи). Оценить погрешность вычисления, взяв за основу истинный результат вычисления. В случае появления ошибки вычисления, аргументировать причины такой ошибки.
А = 100,3, В = 201,48.
Вариант А (сложение чисел половинной точности).
Переведем данные числа в двухзначную систему счисления:
100,310=1100100,10011=1,10010010011*1026
10010=11001002
0,310=(10011) данное число будет периодичным. Возьмем первые пять бит получившегося периода.
2
Врезультате получим число:
А=0 10101 10010010011
В= 201,48
Проделаем такие же операции с данным числом
201,4810=11001001,111102=1,1001001111102*1026
20110= 110010012
0,4810=111102 так как число получается так же периодичным берем только первые пять бит.
2
В=0 10101 100100111110
А+В=М1+М2
1,10010010011*1026+1,1001001111102*1026=10,010111010001*1026=302,1610 301,78-302,16=0,38
Причиной данной ошибки является то, что в силу ограниченности мантиссы произошло отбрасывание значащих бит в дробной части исходных чисел.
Вариант Б (Сложение чисел двойной точности)
При использовании чисел двойной точности погрешности вычислений значительно снижается, так как порядок числа занимает 11, а не 5 бит, а мантисса занимает уже целых 52 бита в отличии 10 битной мантиссы числа половинной точности.
9
Так же переведем данные числа в двоичную систему счисления. Получим следующее:
100,310=1,10010001001100110011002 * 106
10010=11001002
0,310=0.01001100110011002 данное число будет периодичным. Запишем период до заполнении 52 бит мантиссы.
100000001012
В результате получим число:
А=0 10000000101 1001000100110011001100010011001100110001001100110011
В = 201,48
Проделаем такие же операции с данным числом
201,4810= 1,100100101111010111000012 * 107
201,4810= 0,1100100101111010111000012 * 106
20110= 110010012
0,4810= 0.01111010111000012 так как число получается так же периодичным запишем период до заполнения мантиссы.
100000001012 В=0 10000000101 0110010010111101011100001011110101110000101111010111
А+В=М1+М2
1,1001000100110011001100010011001100110001001100110011*106+0,011001001011110101110 00010111101011100001011110101110*107=1.00101101110001111010111000010100011110101110 0001010001111010*108= = 0 10000000111 0010110111000111101011100001010001111010111000010100
10