Файл: Разработка модуля для выполнения операций с натуральными числами в 16-ричной системе счисления.pdf
Добавлен: 15.06.2023
Просмотров: 144
Скачиваний: 2
Введение
Современные люди пользуются десятичной системой счисления. Такой метод счета устоялся скорее всего благодаря количеству пальцев на кистях рук человека. Десятичная система привычна и удобна, она используется нами повсеместно при счете, совершении вычислений. Есть множество других систем счисления, применение которых более уместно в конкретных сферах деятельности.
Одной из таких систем является шестнадцатеричная. Она используется в современной вычислительной технике, в том числе и в низкоуровневом программировании. Так уж сложилось, что последовательности байтов[1] – единиц, из которых состоит любая информация записанная в современном компьютере, удобно записывать в виде пар шестнадцатеричных чисел. Также, работа над любыми компьютерными данными, для которых отсутствует понятное человеку представление, зачастую производится именно в шестнадцатеричном представлении с помощью соответствующей программы[2].
Обычно, при необходимости выполнить математические операции над шестнадцатеричными числами (например, смешать два цвета, записанных в шестнадцатеричном коде, или рассчитать адрес ячейки памяти в компьютере), не имея программы с подходящим функционалом под рукой, их переводят в десятичную систему. Затем, после произведенных вычислений, результат переводится обратно в шестнадцатеричную систему. Этот процесс занимает время, и его следует упростить, с помощью специализированного программного модуля.
Цель данной курсовой работы заключается в разработке модуля для выполнения операций с натуральными числами в 16-ричной системе счисления.
Так как в различных системах и платформах метод записи отрицательного и вещественного числа варьируется, изначально рассматриваются операции только с множеством натуральных чисел, начиная с нуля.
Для достижения поставленной цели необходимо решить следующие задачи:
- Исследование предметной области
- Выбор средств разработки
- Разработка пользовательского интерфейса
- Разработка логической составляющей
Исследование предметной области
Системы счисления
Система счисления – это совокупность правил записи чисел с помощью определенного набора символов.[3]
Общепринятой позиционной системой счисления является десятичная. Причина, по которой она оказалась общепринятой, совсем не математического характера. Десять пальцев рук — вот тот первоначальный аппарат для счета, которым человек пользовался с доисторических времен.
Исторически десятичная система счисления сложилась и развивалась в Индии. Европейцы заимствовали индийскую систему счисления у арабов, назвав ее арабской. Это исторически неправильное название удерживается и поныне. Возникновение и развитие десятичной системы счисления явилось одним из важнейших достижений человеческой мысли (наряду с появлением письменности).[4]
Существуют непозиционные и позиционные системы счисления. В непозиционных системах счисления вес цифры не зависит от позиции, которую она занимает в числе. Так, например, в римской системе счисления в числе XXXII (тридцать два) вес цифры X в любой позиции равен просто десяти. В позиционных системах счисления вес каждой цифры изменяется в зависимости от ее позиции в последовательности цифр, изображающих число.
Любая позиционная система характеризуется своим основанием. Основание позиционной системы счисления – это количество различных знаков или символов, используемых для изображения цифр в данной системе.[5]
Основанием подобной системы может быть любое натуральное число g, большее 1; т.е. может быть двоичная, троичная, 21-ричная СС и т.д.[6] Основание позиционной системы счисления обозначается так: 10112, 2810, 103g.
В общем случае любое число N в позиционной системе счисления можно представить в следующем виде:
Ng = ak*pk + ak-1*pk-1 + … + a1*p1 + a0*p0 + a-1*p-1 + … + a-n*p-n
Где g – основание системы счисления; k+1 – количество разрядов в целой части числа; n – количество разрядов в дробной части числа. Нижние индексы определяют местоположение цифры в числе (разряд):
- положительные значения индексов – для целой части числа;
- отрицательные значения индексов – для дробной части числа.[7]
Позиционные системы счисления имеют ряд преимуществ перед непозиционными: удобство выполнения арифметических и логических операций, а также представление больших чисел, поэтому в цифровой технике применяются позиционные системы счисления.[8]
Представление данных в компьютерах
Объектом хранения, передачи и переработки в компьютере является информация, представленная в виде данных — чисел и текста. Это качественно различные виды данных, но принципы работы компьютера и с теми, и с другими довольно сходные. Суть в том, что для представления информации в компьютере используется некоторый фиксированный набор символов.
Каждый символ такого набора представляется определенным числом (кодом), причем в разных типах ЭВМ используются разные способы кодирования, т.е. одним и тем же символам сопоставляются различные числовые коды. [9]
Процессор компьютера работает с данными, представленными в двоичной системе счисления, поэтому двоичная СС для нас представляет наибольший интерес. В этой системе для записи чисел используются только две цифры: 0 и 1.[10]
Использование двоичной системы счисления позволило упростить создание логических схем и методы хранения данных.
На таблице 1 изображено сопоставление десятичных натуральных чисел с их записью в двоичной системе счисления.
Таблица 1
|
Десятичная система |
Двоичная система |
|
0 |
0 |
|
1 |
1 |
|
2 |
10 |
|
3 |
11 |
|
4 |
100 |
|
5 |
101 |
|
6 |
110 |
|
7 |
111 |
В действительности, методы записи чисел в компьютерах немного отличается, и варьируются в зависимости от типа представляемого числа и используемой компьютером архитектуры.
Для целых чисел, как правило, используется не менее одного байта (8 бит), так как он является минимальным количеством информации, на которое может ссылаться компьютер, обращаясь к ячейкам памяти. Если нужно чтобы число могло принимать негативные значения, то для определения знака используется старший бит. При этом, хоть и общее количество возможных значений не изменяется, максимально возможное значение числа по модулю уменьшается вдвое (таблица 2).
Таблица 2
|
Размер (байт) |
Тип |
Диапазон значений |
|
1 |
Неотрицательное |
0 … 255 |
|
1 |
Со знаком |
-128 … 127 |
|
2 |
Неотрицательное |
0 … 65535 |
|
2 |
Со знаком |
-32768 … 32767 |
|
4 |
Неотрицательное |
0 … 4294967295 |
|
4 |
Со знаком |
-2147483648 … 2147683647 |
Целые числа используются и для кодирования символов текста. На таблице 3 изображен пример текста, записанного в кодировке UTF-8, в которой для каждого символа отдается 8 бит.
Таблица 3
|
Текст |
Двоичная запись в UTF-8 |
|
Text |
01010100 01100101 01111000 01110100 |
Для представления вещественных (дробных) чисел, используется более комплексный метод.
Такие числа хранятся в памяти компьютера в виде двух частей. Одна часть представляет значение, а другая – масштабный коэффициент, который увеличивает или уменьшает значение. Рассмотрим следующую аналогию. Предположим, что есть два числа: 34.1245 и 34124.5. Они идентичны друг другу за исключением масштабного коэффициента. Первое значение можно представить как 0.341245 (базовое значение) и 100 (масштабный коэффициент). Второе значение можно представить как 0.341245 (такое же базовое значение) и 100000 (больший масштабный коэффициент).
Масштабный коэффициент предназначен для перемещения десятичной точки, откуда и пошел термин плавающая точка.[11]
В компьютерах используется похожий способ представления чисел с плавающей точкой, но с единственным отличием – он основан на двоичных числах, и масштаб производится с помощью множителя 2, а не 10.
Под числа с плавающей точкой, как правило отдается не менее чем 4 байта. С увеличением памяти выделенной под число, повышается максимальная точность представления числа и расширяется общий диапазон возможных значений.
Таблица 4
|
Размер (байт) |
Диапазон значений |
|
4 |
3.4 * 10-38 … 3.4 * 1038 |
|
8 |
1.7 * 10-308 … 1.7 * 10308 |
|
10 |
3.4 * 10-4932 … 3.4 * 104932 |
Использование шестнадцатеричного представления
Один байт можно закодировать в виде двузначного шестнадцатеричного числа, чем и воспользовались инженеры и программисты, обеспечив себе более компактное и удобное представление информации (таблица 5).
Таблица 5
|
Двоичная запись |
Шестнадцатеричная запись |
|
01010100 01100101 01111000 01110100 |
54 65 78 74 |
Любой hex[12]-редактор позволяет исследовать и модифицировать файл на низком уровне, оперируя с битами и байтами. Содержание файла представляется в шестнадцатеричной форме (рисунок 1). Это базовый функционал. Однако некоторые редакторы предлагают пользователям намного большее, позволяя разобраться, собственно, что есть что в том непонятном наборе символов, который появляется при открытии файла. Для этого автоматически извлекаются ASCII и Unicode строки, осуществляется поиск известных паттернов, выполняется распознавание основных структур данных и многое другое.[13]
Рисунок 1
Шестнадцатеричная система используется и при кодирования цвета в так называемый «Hex код» в модели RGB[14], в котором цвет представлен тремя байтами для каждого из трех основных цветов (таблица 6).
Таблица 6
|
Цвет |
Hex код |
|
Красный |
FF0000 |
|
Желтый |
FFFF00 |
|
Белый |
FFFFFF |
|
Серый |
808080 |
|
Черный |
000000 |
|
Травяной |
5DA130 |
Операции с натуральными числами
Понятие «натуральное число» не совсем неоднозначно. В математике существует как минимум два определения множества натуральных чисел:
- Числа, возникающие при подсчете (нумерации) объектов: 1, 2, 3 и т.д. В качестве примера подойдет фраза “Едем на третий этаж”. Область определения данного множества начинается с единицы, и уходит в плюс-бесконечность. Принято обозначать символом N (от лат. naturalis – естественный).
- Числа, используемые при обозначении количества однородных объектов: 0, 1, 2, 3 и т.д. В качестве примера подойдет фраза “На столе лежат шесть яблок”. Здесь область определения дополняется нулем. Обозначается N0 или Z0.
Система натуральных чисел не является полной, операции над её числами не всегда определены. К замкнутым операциям (операциям, не выводящим результат из множества натуральных чисел) над натуральными шестнадцатеричными числами относятся следующие арифметические операции:
- Сложение
- Умножение
- Возведение в степень
Дополнительно рассматривают еще две операции. С формальной точки зрения они не являются операциями над натуральными числами, так как не определены для всех пар чисел (иногда существуют, иногда нет), поэтому необходимо соблюдать особые правила:
- Вычитание – уменьшаемое число должно быть больше или равно вычитаемому;
- Деление – делимое число должно делиться без остатка.
Выбор средств разработки
Сравнение языков программирования
Исходя из требований, представленных к разрабатываемому модулю (приложение 1, пункт 3 технического задания), для сравнения будут выбраны языки, используя которые можно достичь кроссплатформенной работы с минимальными изменениями кода программы под конкретную платформу и с минимальными затратами на отладку модуля в различных средах выполнения.[15]