лаба ит 5
.docx
Министерство
образования и науки РФ
ФЕДЕРАЛЬНОЕ
ГОСУДАРСТВЕННОЕ БЮДЖЕТНОЕ ОБРАЗОВАТЕЛЬНОЕ
УЧРЕЖДЕНИЕ
ВЫСШЕГО
ПРОФЕССИОНАЛЬНОГО ОБРАЗОВАНИЯ
«Белгородский
Государственный Технологический
Университет им. В.Г. Шухова»
(БГТУ им.
В.Г. Шухова)
ИИТУС
Кафедра:
«Техническая
кибернетика»
Лабораторная
работа №5 дисциплина:
«Информационные технологии» тема:
«Кодирование
числовой информации. Применение
побитовых операций.»
Выполнил:
студент
группы УС-11
Татаринов
Алексей
Принял: ст.
препод. кафедры ТК
Бушуев Д.А.
Белгород
2014
Содержание
1.Цель работы 3
2.Список индивидуальных заданий 4
3.Выполнение работы 6
3.1Задание 1. 6
3.2Задание 2. 8
-
Цель работы
Изучение различных числовых форматов целых и вещественных чисел, а также правил выполнения различных арифметических и логических операций над ними.
Применение побитовых операций над числами для проверки определенных свойств числа.
-
Список индивидуальных заданий
-
Для данной программы вычислить итоговый результат (в десятичной системе счисления) со всеми расчетами в двоичной системе счисления. Задание выполнить в двух вариантах, в зависимости от типа переменных:
Var a, b, rez : shortint; |
Var a, b, rez : byte; |
2) Вычислите значение указанного выражения. Вычисления и ответ представить в двоичной системе счисления.
3) Представить заданные вещественные числа А и В в формате с плавающей точкой. Выполнить сложение этих чисел в различных числовых форматах: а) как числа половинной точности, б) как числа двойной точности (см. описание типов). Все стадии решения представить в двоичной системе счисления (или в 16-ой для компактности записи). Оценить погрешность вычисления, взяв за основу истинный результат вычисления. В случае появления ошибки вычисления, аргументировать причины такой ошибки.
4) Для данного целого числа А определенного типа отдельно осуществить следующие виды битовых сдвигов
а) логический
б) арифметический
в) циклический
со всеми выкладками в двоичной системе счисления. Запишите получившиеся результаты в десятичной системе счисления.
5) Используя арифметические и побитовые операции, осуществите указанные действия, написав необходимую последовательность команд на одном из языков программирования. Привести два примера работы данной программы над разными числами со всеми выкладками в двоичной системе счисления.
Детали реализации:
Во всех таких задачах предполагается, что
а) все используемые числа являются однобайтовыми без знаковыми целыми (если не указано отдельно другое описание числа),
б) отсчет бит в байте начинается с единицы, начиная с младшего бита.
в) при описании маски используется следующая интерпретация:
символ «?» означает ровно один произвольный бит.
символ «*» означает любую последовательность бит.
6) Для заданного IP адреса и маски подсети рассчитать следующие параметры (см. дополнительную теоретическую часть):
а) адреса хостов в данной подсети (минимальный/максимальный IP),
б) адрес подсети,
в) число хостов,
г) широковещательный адрес (Broadcast),
д) префикс сети.
Вариант 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.
-
Выполнение работы
-
Задание 1.
-
Для данной программы вычислить итоговый результат (в десятичной системе счисления) со всеми расчетами в двоичной системе счисления. Задание выполнить в двух вариантах, в зависимости от типа переменных:
Var a, b, rez : shortint; |
Var 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
Вариант 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
-
Задание 2.
Вычислите значение указанного выражения. Вычисления и ответ представить в двоичной системе счисления.
1018 : 1012 + 1019∙(10110 – 1018) + 10116
Для выполнения данного задания переведем все числа в двоичную систему счисления:
1018 = 10000012
1012 = 1012
1019 = 10100102
10110 = 11001012
1018 = 10000012
10116 = 1000000012
Выполним все действия в нужной очередности.
-
11001012-10000012=1001002
-
10100102*1001002=1011100010002
-
10000012 / 1012=11012
-
11012+1011100010002=1011100101012
-
1011100101012+1000000012=1100100010012