Файл: Разработка модуля для выполнения операций с натуральными числами в шестнадцатеричной системе счисления.pdf

ВУЗ: Не указан

Категория: Курсовая работа

Дисциплина: Не указана

Добавлен: 17.06.2023

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

Скачиваний: 4

ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.

Введение

Разработка программного модуля для выполнения операций с натуральными числами в шестнадцатеричной системе счисления — это, прежде всего, разработка компьютерной программы. Такая программа может использоваться, например, в учебных целях для наглядной демонстрации операций над числами в шестнадцатеричной системе счисления, так и для создания более сложных программ, например, шестнадцатеричного калькулятора.

Для выполнения данной работы необходимо разобраться, что же представляет из себя шестнадцатеричная система счисления, а так же, как в её реалиях выполняются операции над числами. Кроме того, при создании программного модуля необходимо понять, как реализуется модульное программирования, какие подходы используются и какие у них достоинства и недостатки.

Далее необходимо определить задачи, стоящие перед программным модулем, предъявляемую к нему функциональную составляющую и определиться с принципом его работы, на основании которого составить алгоритм работы программы и оформить его по ГОСТ 19.701-90.

При выборе языка программирования следует учитывать особенности конкретного языка и применение их к алгоритму программного модуля. Определившись с языком программирования, можно будет написать программу по заранее разработанному алгоритму и протестировать её работу.

Целью работы является разработка модуля для выполнения операций с натуральными числами в шестнадцатеричной системе счисления.

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

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

1. Обоснование актуальности разработки модуля

1.1. Шестнадцатеричная система счисления и её роль
в информационных технологиях

Система счисления — это символический метод записи чисел. Другими словами, это представление чисел с помощью письменных знаков. Каждая система счисления даёт числу уникальное представление[1].


Для отражения алгебраической и арифметической структуры чисел лучше других подходят позиционные системы счисления. В позиционных системах счисления один и тот же числовой знак (цифра) в записи числа имеет различные значения в зависимости от того места (разряда), где он расположен. Вводится понятие основания системы счисления — количество различных знаков, которые используются для записи цифр. Если максимально большой цифры не хватает для записи числа — задействуется следующий разряд. Разряд — это позиция цифры в числе, и нумеруются разряды справа налево. Каждый следующий разряд больше другого на степень основания системы счисления. Таким образом, для позиционной системы счисления с основанием b:

1234b = 1 * b3 + 2 * b2 + 3 * b1 + 4 * b0

К числу таких систем относится современная десятичная система счисления, возникновение которой связано со счётом на пальцах. С древних времён и по наши дни люди повсеместно используют десятичную систему счисления для произведения вычислений над любыми числами[1]. Однако, с развитием вычислительной техники старые устои приходится пересматривать. Дело в том, что в вычислительной технике каждая цифра должна быть как-то представлена на физическом носителе. Если применять десятичную систему счисления на вычислительной технике, то придётся создавать такие устройства, которые могут находиться в десяти различных устойчивых состояниях. Это технологически сложно. Проще изготовить физический элемент, который может удерживать лишь два состояния (например - есть ток и нет тока). Это одна из основных причин, почему именно двоичная система счисления является языком вычислительной техники[2].

В двоичной системе счисления используется всего две цифры — 0 и 1. Другими словами, это позиционная система счисления с основанием 2. Поскольку в формировании числа участвуют всего две цифры, разряды достигают своего предела быстрее, чем в других системах счисления, а это приводит к тому, что двоичное представление числа почти всегда будет длиннее, чем десятичное[1].

Устройство, способное находиться в одном из двух устойчивых положений называется триггером, а каждый разряд двоичной формы записи числа — битом. Восемь битов объединяют в один байт, а байты, в свою очередь, в слова (одно слово — два байта) и в двойные слова (четыре байта). Именно двойное слово является основной единицей хранения информации в вычислительных системах на базе процессоров архитектуры x86, самой популярной архитектуры процессоров[2]. Такие числа имеют тридцать два символа и состоят сплошь из нулей и единиц и для человека работа с такими числами является не вполне удобной. Во-первых, из-за длины представления чисел, а во-вторых, постоянное повторение и чередование ноликов и единиц нередко вызывает ошибки. В результате, часто программисты используют другие системы счисления, совместимые с двоичной. Совместимыми являются те системы счисления, чьи основания являются степенью одного и того же числа[1].


Например, 2 = 21, а 8 = 23, то есть 2 и 8 являются степенью одного и того же числа. Проявляется это в том, что любое двоичное число можно представить в восьмеричной системе счисления, разбив все цифры на группы по три разряда (начиная от первого разряда). По три — потому что степень основания восьмеричной системы счисления в три раза больше, чем степень основания двоичной. Такие группы по три разряда называются триадами. Далее обращаемся к таблице триад, представленной на рисунке 1.

Двоичная
система
счисления

Восьмеричная
система
счисления

000

0

001

1

010

2

011

3

100

4

101

5

110

6

111

7

Рис. 1. Таблица триад

Подставленные на место триад восьмеричные цифры образуют восьмеричную форму числа. Например:

11011110012 = 001 101 111 0012 = 15718

Восьмеричная система счисления была весьма распространена на заре информатики, но имеет ряд недостатков, один из которых — неудобство представления двойных слов. Двойное слово состоит из тридцати двух разрядов, и не делится на триады нацело[3].

Во устранение данного недостатка стали использовать шестнадцатеричную систему счисления, основанием которой является двойка в четвёртой степени[2]. Перевод из двоичной системы счисления в шестнадцатеричную похож на перевод в восьмеричную систему, за исключением того, что двоичные разряды группируются по четыре (ведь степень основания шестнадцатеричной системы счисления превышает степень основания двоичной в четыре раза). Таким группы по четыре разряда называются тетрадами. В шестнадцатеричной системе счисления шестнадцать различных цифр, что на шесть больше, чем привычных нам арабских цифр. Для обозначения этих самых шести цифр, идущих вслед за арабскими, используются первые шесть букв латинского алфавита — A, B, C, D, E, F[1]. Для перевода чисел из двоичной системы счисления в шестнадцатеричную и наоборот используют таблицу тетрад, представленную на рисунке 2.

Двоичная
система
счисления

Шестнадцатеричная
система
счисления

Двоичная
система
счисления

Шестнадцатеричная
система
счисления

0000

0

1000

8

0001

1

1001

9

0010

2

1010

A

0011

3

1011

B

0100

4

1100

C

0101

5

1101

D

0110

6

1110

E

0111

7

1111

F


Рис. 2. Таблица тетрад

Пример представления двоичного числа в шестнадцатеричной системе счисления:

10111110111011112 = 1011 1110 1110 11112 = BEEF16

Неоспоримое преимущество шестнадцатеричной системы счисления в удобном выражении через неё двоичного кода. Один байт, равный восьми битам — это ровно две тетрады. Соответственно, слово — это четыре тетрады, а двойное слово — восемь[2].

В низкоуровневом программировании шестнадцатеричная система счисления играет очень важную роль. Дело в том, что регистры процессора архитектуры x86 представляют собой именно двойные слова. При этом регистры разбиты на слова, а слова - на байты, для организации удобного обращения к ним и выполнения арифметических и логических операций[4]. Схема регистра общего назначения — аккумулятора представлена
на рисунке 3.

EAX

AX

AH

AL

Рис. 3. Схема регистра EAX

Регистр EAX представляет собой двойное слово, то есть 32-х разрядное двоичное число. При записи в регистр EAX двоичных данных, в целях контроля за переполнением, используют восемь шестнадцатеричных цифр.

Регистр AX представляет собой слово, то есть 16-х разрядное двоичное число. Соответственно, при записи в него двоичных данных используют четыре шестнадцатеричные цифры.

Регистры AH и AL представляют собой байты, то есть восемь двоичных разрядов. Запись в байт производится с помощью двух шестнадцатеричных цифр[2].

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

1.2. Операции над натуральными числами
в шестнадцатеричной системе счисления

Натуральные числа — числа, возникающие естественным образом при счёте. Последовательность всех натуральных чисел, расположенных в порядке их возрастания, называется натуральным рядом[1].

В первом случае ряд натуральных чисел начинается с единицы, во втором — с нуля. Не существует единого для большинства математиков мнения о предпочтительности первого или второго подхода (то есть считать ли ноль натуральным числом или нет). В подавляющем большинстве российских источников традиционно принят первый подход. Второй подход, например, применяется в трудах Бурбаки, где натуральные числа определяются как мощности конечных множеств. Кроме того, отсчёт с нуля широко распространён в программировании (например, для индексации массивов, нумерации битов, машинного слова)[3].


Для натуральных чисел естественным образом определены операции сложения и умножения. При объединении двух наборов, содержащих некоторое количество предметов, новый набор будет иметь столько предметов, сколько было в первых двух наборах вместе. Указанное действие носит название сложения и является простейшей бинарной операцией.

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

Вычитание — это операция, обратная сложению. Операция вычитания, если её применять ко всем парам натуральных чисел, а не только к таким, которые могли бы быть суммой и слагаемым в рамках операции сложения, позволяет выйти за пределы натурального ряда, то есть разность двух натуральных чисел не обязательно является натуральным числом — в результате вычитания может получиться ноль или вовсе отрицательное число. Отрицательные числа уже невозможно рассматривать как количество предметов, на числовой оси они расположены левее ноля. Множество чисел, получившееся добавлением к натуральным числам отрицательных чисел и числа ноль, носит название множества целых чисел.

Обратной к операции умножения является операция деления. Первое определение деления — это поиск числа, которое содержится в делимом столько раз, сколько единиц содержится в делителе. Такое определение дано в учебниках арифметики XIV века. Для натуральных чисел, не являющихся множителем и произведением, известна операция деления с остатком.

Операция вычитания является ничем иным, чем операцией сложения с отрицательным числом. Умножение — это многократное сложение. Деление, самая сложная операция — многократное вычитание, а как известно, вычитание — и есть сложение. Любая из четырёх арифметических операций сводится к сложению. Арифметико-логическое устройство процессора физически умеет выполнять только сложение, однако, благодаря удобному представлению отрицательных чисел в двоичной системе счисления и алгоритмам, выполняет все четыре арифметические операции[2].

Выполнение арифметических операций над числами в шестнадцатеричной системе счисления производится по всем канонам позиционных систем счисления. Необходимо лишь помнить, что максимальной цифрой в каждом разряде является F[1].

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

  • 116 + 516 = 616;
  • 2916 + 116 = 2A16;
  • 10016 - 116 = FF16;
  • 1016 * 1016 = 10016;
  • A16 * B16 = 6E16;
  • DEAD16 / 516 = 2C8916