RSS    

   Реферат: Изучение методики перевода из одной системы исчисления в другую и разработка программы для этой операц

Реферат: Изучение методики перевода из одной системы исчисления в другую и разработка программы для этой операц

                   2О Г Л А В Л Е Н И Е

   1. Введение

   2. Постановка задачи

   3. Теоретическая основа решения задачи

   4. Методологический подход

   5. Алгоритм программы для перевода из одной

      системы исчисления в другую

   6. Текст программы с комментариями

   7. Подробные разъяснения по программе

   8. Как пользоваться программой


                         - 2 -

                   2I.  В В Е Д Е Н И Е

   Проблема перевода из одной системы исчисления в дру-

гую очень часто встречается при программировании.  Осо-

бенно часто  появляется такая проблема при программиро-

вании на Ассемблере.  Например при  определении  адреса

ячейки памяти, для получения двоичного или шестнадцати-

ричного эквивалентов десятеричного числа. Иногда встает

проблема увеличения скорости вычислений, и тогда прихо-

дит на  помощь  двоичная  система  исчисления.  В  этой

системе исчисления  очень  быстро  производить операцию

умножения путем сдвига одного из операндов  в  двоичном

виде влево  на такое число позиций в которой стоит еди-

ница во втором операнде.

   Рассмотрим подробнее  как это осуществляется.  Пусть

нам надо умножить число 1101 на 101 (оба числа в двоич-

ной системе исчисления).  Машина делает  это  следующим

образом: она  берет  число 1101,  и если первый элемент

второго множителя  равен  1 то она заносит его в сумму.

Затем сдвигает число 1101 влево на одну позицию,  полу-

чая тем самым 11010 и если второй элемент второго  мно-

жителя равен единице то тоже заносит его в сумму.  Если

элемент второго множителя равен нулю то сумма не  изме-

няется. В связи с этим,  если второй множитель содержит

много нулей, то операция умножения выполняется довольно


                        - 3 -

долго, т.к.  машина проверяет каждую цифру второго мно-

жителя, в том числе и нули.  Если же самому делать опе-

рацию  умножения то нули можно пропустить и тогда умно-

жение сделается быстрее.

   Что касается  применения  шестнадцатиричной  системы

исчисления то здесь тоже большие  возможности.  Во-пер-

вых,  некоторые стандартные процедуры Паскаля и Си тре-

буют задачи параметров в шестнадцатиричной  системе,  а

во-вторых, такая  система  исчисления  очень удобна для

хранения информации, т.к. число в шестнадцатиричном ви-

де занимает  меньше объема диска чем тоже число в деся-

теричном, а тем более в двоичном виде.

   Таким образом мы убедились, что проблема перевода из

двоичной системы исчисления в десятеричную, из шестнад-

цатиричной в десятеричную и обратно очень актуальна.

                 2II.  ПОСТАНОВКА ЗАДАЧИ

   Из введения стало понятно, что наиболее часто встре-

чающиеся системы исчисления это двоичная,  шестнадцати-

ричная и десятеричная.  Иногда встречается и восьмирич-

ная система исчисления, но это бывает так редко, что не

стоит на этом останавливаться.  Итак,  наша задача осу-

ществить перевод из двоичной системы исчисления в деся-

теричную и шестнадцатиричную,  из десятеричной в двоич-

ную и шестнадцатиричную и из шестнадцатиричной в двоич-

ную и  десятеричную,  т.е.  взаимно связать все эти три

системы исчисления.


                        - 4 -

        2III.  ТЕОРЕТИЧЕСКАЯ ОСНОВА РЕШЕНИЯ ЗАДАЧИ

   Как же на практике осуществляется перевод  из  одной

системы исчисления в другую? Попробуем разобраться.

   Допустим нам нужно перевести число 567  десятеричной

системы в двоичную систему.  Делается это следующим об-

разом: отыскивается максимальная степень двойки,  чтобы

два в  этой  степени  было  меньше  или равно исходному

числу. В нашем случае это 9,  т.к. 2^9=512, а 2^10=1024

что больше  нашего  начального числа.  Таким образом мы

получили число разрядов результата.  Оно равно  9+1=10.

Значит результат будет иметь вид 1ххххххххх, где вместо

х может стоять 1 или 0. Найдем вторую цифру результата.

Возведем двойку  в  степень  9  и  вычтем  из исходного

числа: 567-2^9=55.  Затем сравниваем с числом  2^8=256.

Так как  55  меньше  256 то девятый разряд будет нулем,

т.е. результат уже примет  вид  10хххххххх.  Рассмотрим

восьмой разряд:  2^7=128 > 55,  значит и восьмой разряд

будет нулем.  Т.к. 2^6=64 то седьмой разряд равен нулю.

Таким образом  мы  получили  четыре  старших  разряда и

число примет вид 1000хххххх.  Вычисляем 2^5=32 и видим,

что 32  <  55,  значит шестой разряд равен 1 (результат

10001ххххх), остаток 55-32=23. 2^4=16 < 23 - пятый раз-

ряд 1  =>  100011хххх.  Остаток  23-16=7.  2^3=8 > 7 =>

1000110ххх. 2^2=4 < 7 => 10001101хх, остаток 3. 2^1=2 <

3 => 100011011х, остаток 1. 2^0=1 = 1 => 1000110111. Мы

получили конечный результат.


                        - 5 -

   Теперь попробуем перевести тоже число 567,  но уже в

шестнадцатиричную систему.  Подход примерно  такой  же.

Определим максимальный разряд.  Т.к.  16^2=256 < 567, а

16^3=4096 > 567,  то максимальный разряд 2+1=3. Опреде-

лим число,  которое  будет  стоять  в  третьем разряде.

Ищется максимальный множитель в пределах от  1  до  15,

чтобы текущая  степень  шестнадцати  умноженная на этот

множитель была меньше или равнялась исходному числу  (а

в дальнейшем - остатку). В нашем примере этот множитель

2, т.к.  256*2=512 < 567,  а 256*3=768  >  567.  Значит

старший разряд  нашего результата будет равен  22 0,  и ре-

зультат примет вид 2хх, где вместо х могут стоять любые

цифры или      буквы     из     ниже     перечисленных:

0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F. Вычисляем     остаток:

567-2*16^2=55. Определим  что  будет  стоять  во втором

разряде. Так как 3*16^1=48 < 55,  а 4*16^1=64 > 55,  то

во втором   разряде   будет   стоять   цифра   23 0.  Оста-

ток=55-3*16^1=7. Определяем первый разряд:  т.к. 16^0=1

то цифра первого разряда равна остатку,  т.е.   27 0. Таким

образом мы получили число  2237 0, но уже в шестнадцатирич-

ной системе исчисления.

   Операция перевода из десятеричной  системы  выглядит

гораздо проще.  Рассмотрим  ее  на  примере перевода из

шестнадцатиричной системы в десятеричную.

   Допустим нам нужно перевести число  24A3F  0в десятерич-

ную систему.  Берем старший (4 ый) разряд и возводим 16

в степень 4-1=3, получаем 16^3=4096. Полученный резуль-

тат умножаем на значение четвертого  разряда,  т.е.  4.


                        - 6 -

Получается 4096*4=16384.  Этот  результат  мы заносим в

сумму. Переходим к следующему  разряду:  16^2=256.  256

нужно умножить на значение третьего разряда т.е. A. Как

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

от A до F символизируют числа от 10 до 15 ( A=10, B=11,

C=12, D=13, E=14, F=15). Умножив 256 на 10 получим 2560

и этот результат добавляем к сумме, в которой у нас по-

ка было 16384.  В сумму у нас получилось 18944. Перехо-

дим ко второму разряду:  3*16^1=48, добавив это в сумму

получим 18992. И последний разряд: 15*16^0=15. Конечная

сумма равна  219007 0. Мы получили результат в десятеричной

системе исчисления.

              2IV.  МЕТОДОЛОГИЧЕСКИЙ ПОДХОД

   Рассматривая перевод   из    десятеричной    системы

исчисления в двоичную и шестнадцатиричную,  можно найти

много общего. В обоих случаях мы ищем максимальную сте-

пень, затем в обоих случаях сравниваем остаток с числом

возведенным в  степень  разряда.  Единственная  разница

заключается в том,  что при переводе в двоичную систему

основанием степени служит  двойка,  а  при  переводе  в

шестнадцатиричную систему основанием служит число шест-

надцать. Возникает вопрос:  а нельзя ли объединить  оба

этих перевода  в  одну процедуру,  в которую в качестве

параметров передавать основание степени? При более под-

робном рассмотрении  перевода  в двоичную систему можно

заметить, что сравнивая остаток со степенью  двойки  мы


                        - 7 -

отмечаем только как бы два состояния:  да или нет, т.е.

1 или 0,  а при переводе в шестнадцатиричную систему мы

рассматриваем не  просто  степень числа шестнадцати,  а

произведение этой степени на величину будущего разряда.

Возникает вопрос: а не одно ли это и тоже. Ведь умножив

число на единицу мы его не  изменяем,  а  следовательно

нет разницы  между  тем,  сравнивать степень с остатком

или с остатком умноженным на единицу. Таким образом вы-

яснилось, что  перевод из десятеричной системы исчисле-

ния в двоичную и в шестнадцатиричную можно осуществлять

одной процедурой,  в которую в качестве параметра пере-

давать основание  степени,  т.е.   основание   конечной

системы исчисления.

   Чтобы не усложнять программу и не  делать  множество

операторов условного перехода в зависимости от того,  к

какой системе исчисления  принадлежит  исходное  число,

ввод этого числа осуществляется единым блоком, и исход-

ное число в результате выполнения этого блока записыва-

ется в  виде строковой переменной и передается на обра-

Страницы: 1, 2, 3


Новости


Быстрый поиск

Группа вКонтакте: новости

Пока нет

Новости в Twitter и Facebook

                   

Новости

© 2010.