Главная arrow Документация arrow Системы исчисления
17.08.2018 г.
Краткие новости
Вот и ещё один год подошёл к концу. Как говорится, как новый год встретишь, так его и проведёшь. Поэтому мы решили сделать посетителям сайта небольшой подарок, чтобы и в новом году продолжать радовать всех заинтересованных лиц завершёнными проектами. На сайте ощутимо пополнился раздел программ. Марат модифицировал лучшую опубликованную программу для поиска указателей Pointer Searcher, созданную Horror'ом. Также на нашем сайте опубликован продвинутый графический редактор уровней Map Editor of Dreams за авторством Джинни. В архиве находятся плагины для работы с графикой консолей NES, SNES и SMD, написанные Маратом. Guyver выложил полную версию своего патчера Chief-Net ips2exe на английском и русском языках, в котором добавлена возможность помимо иконки прикреплять к готовому патчу картинки и трекерную музыку. Также в разделе разное появилась небольшая статья о "Замене игр в многоигровке NES на другие". Mefistotel дописал свою документацию "Пойнтеры. Часть третья", в котором на примерах рассмотрены хитрые приёмы по работе с указателями  и начал наполнять новый раздел сайта, "Кладезь". Этот раздел предназначен для сбора полезных вещей от переводчиков: утилит, скриптов, полезной информации и прочего контента, имеющего отношение к ромхакингу. Ну и в завершении, мы представляем вам два небольших перевода. На этот раз вивисекции подверглись стратегии Defender of the Crown (NES) и Fire Emblem Gaiden (NES). Ещё был обновлён до версии 1.0 перевод Monster World IV (SMD), подробности можно узнать в файле readme. Всего хорошего вам в новом году, удачи и новых свершений!

snegurkasanta

 
Цитаты
Владение русской орфографией - это как владение кунг-фу: настоящие мастера не применяют его без необходимости ;о)
Внимание! Всем-всем-всем!
Товарищи! Если у кого-то из вас вдруг завалялись ненужные (или не очень нужные) картриджи денди - не дайте пропасть добру! Приму в дар, скопирую и верну хозяину или куплю/обменяю любые интересные картриджи, особенно редкие или пиратские. С предложениями обращайтесь НА ФОРУМ или В ЛИЧКУ. Подпись: Guyver.
Системы исчисления Печать E-mail
Автор Guyver   
10.05.2008 г.

СИСТЕМЫ ИСЧИСЛЕНИЯ (автор: Chief_exb)

Оглавление.

1. Введение.
2. Двоичная система.
3. Шестнадцатеричная система.
4. Восьмеричная система исчисления.
5. Преобразование двоичной системы к 16, 8-ричной и обратно.
6. Дроби.

Введение.

Совсем недавно я обнаружил, что многим нелегко даётся понимание шестнадцатеричной и двоичной систем исчисления. Поэтому этот FAQ я посвящу им. Начнём с простого. Все мы знаем десятичную систему исчисления, так как обычно только с ней и сталкиваешься. Возьмём число 1234.
 
Степень 103210
цифра1234
Таблица №1

Число 1234 это ничто иное как 1103+2102+3101+4100=1234

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

Допустим, A-число состоит из n цифр системы исчисления D, тогда его можно записать так: А=аn∙Dn-1n-1∙Dn-2+ʌ2∙D11∙D (Ур.1), где a - цифры этого числа.

Теперь о системах исчисления по подробнее.

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

  Система исчисления с числом цифр 2: 0 и 1 (D=2). В компьютере информация кодируется двумя состояниями: сигналами пассивного уровня или активного уровня, т.е. 0 или 1. Поэтому эта система исчисления и была разработана. Теперь применим уравнение 1 к двоичной системе и получим число 1001.

Если это понятно, то как нам перейти от 10 системы к двоичной? Нужно делить последовательно на два.

 
102        
1052       
0422      
  |121      
  |  |0  |       
 \/ \/\/ \/      
0101      

<--

 --- --- ---      
          
          

Стрелкой показан порядок записи цифр остатков от деления на 2. Наше число 10 десятичное это ничто иное, как 1010 двоичное. Далее, чтобы не было разночтений, я буду писать 1010, где нижний индекс основание системы исчисления.

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

D=16. Пожалуй, с ней исследователю РОМов приходится сталкиваться очень часто. Как вы уже заметили, двоичная система исчисления очень неудобна для записи. Чтобы написать число 1010 надо 4 двоичных цифры. А 8 цифр дают всего лишь 25510. Поэтому было решено перейти для записи к системе кратной двоичной: шестнадцатеричной. Цифры этой системы: 0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F.

Применяя уравнение 1, можно записать число 1F16
15161+15160=15+16=31

1F16=3110

Преобразование из 10 к 16, всё то же деление на D=16

3116
161
154
 |1
 | |
 \/\/ 
F1
<------

Записываем остатки в обратном порядке и получаем 1F (естественно заменяя 15 на F).

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

D=8 утратила свое значение, уступив место 16-ричной системе исчисления. Но она всё также преподаётся в университетах и школах. Все то же самое, что и для 16.

Применяя уравнение 1, можно записать число 2468 как:
282+481+680=128+32+6=166

2468=16610

Преобразование из 10 к 8, всё то же деление на D=8

1668 
160208

6

162
 |4 |
 | | | 
\/\/\/
642
 <-- -- --
 
Записываем остатки в обратном порядке, получаем 246.

Преобразование двоичной системы к 16, 8-ричной и обратно.

10162
 000000
110001
220010
330011
440100
550101
660110
770111
881000
991001
10A1010
11B1011
12C1100
13D1101
14E1110
15F1111
Таблица №2

На практике такое часто нужно. Как это сделать? Нужно просто заменить двоичные цифры

Имеем 2-ичное число 1010001 дополняем спереди его нулями, чтобы количество цифр было кратно 4: 0101 0001, и заменяем полученные тетрады по таблице.
Получаем 5116=10100012 .

Теперь с 8-миричной системой всё то же самое, только заменяем не тетрады, а триады.
Подчёркнутый 0 не учитывать. 11100 дополняем нулями спереди чтобы число цифр было кратно 3. и заменяем по таблице 2: 011 1002=348 .

Легко заметить, что обратное преобразованием ничем ни отличается.
Допустим 1F16=0001 11112. Или 248=010 1002

Всё очень просто, не правда ли?

Дроби.

Как дело обстоит с дробями? Описанный формат дроби не соответствует его представлению в памяти персонального компьютера, но изучается в университетах, для базиса знаний. Чтобы перейти потом к сложному. Итак, помните таблицу 1?

А что с десятичной дробью? Оказывается всё просто: 1234,12

 
Степень 103210-1-2
цифра123412
Таблица №3

1103+2102+3101+4100+110-1+210-2=1234,12
Уравнение 1 примет вид.

А-целое, B-дробное.Число=C=A+B
А=аn∙Dn-1n-1∙Dn-2+ʌ2∙D11∙D для целой части
И для дробной части.
B=b1∙D-1+b2∙D-2+ʌ+b2∙D-(k-1)+bk∙D-k
Для преобразования дроби в двоичную систему исчисления необходимо умножать её на два. Возьмем число 8,12.

810=10002
0,12x2=0,24 нет ничего в целой части пишем в дробь 0,0
0,24x2=0,48 нет ничего в целой части пишем в дробь 0,00
0,48x2=0,96 нет ничего в целой части пишем в дробь 0,000
0,96x2=1,92 в целой части 1 пишем в дробь 0,0001
Отбрасываем целое и продолжаем
0,92х2= И так пока не выйдем на заданный предел точности, ну а я решил остановиться.

Выходит что 8,1210~1000.00012
С шестадцатиричными числами всё также, только умножаем на 16. Если есть в целой части число, пишем в дробь его, если нет, то пишем 0.

Чтобы сократить число умножений при преобразовании 10-тичной дроби в 2-ичную, вначале её приводят к шестнадцатеричной записи, а потом переводят её в двоичную по методу, описанному выше заменой на тетрады по таблице.

Пример :

Число 0,62510
0,625x16=10 10о в целой части пишем в дробь 0,A
Теперь преобразуем двоичную по таблице 0,10102. (A=1010)
Проверим: 2-1+2-3=0,5+0,125=0,625

Как видите и с дробями ничего сложного. Если кого-либо заинтриговала тема, пишите. Возможно FAQ получит развитие. С уважением, Шеф (chief_exb).


Последнее обновление ( 09.01.2010 г. )
 
« Пред.   След. »
home contact search contact search