Основы систем счисления и устного счета. (CCNA1 6.1.2.1 – 6.1.5.1, 9.3.3.1)

Давайте вспомним, как представляются числа в различных системах счисления и как можно перевести число из одной системы счисления в другую. Конечно, существуют разные способы перевода некоторого числа из одной системы счисления в другую – от ручных (на листочке в столбик), до электронных (на калькуляторе, компьютере). Однако, оба варианта требуют наличия вспомогательных средств (авторучка, бумага, калькулятор и т.д.), которые не всегда доступны или, точнее, не всегда доступны вовремя. А тратить время на поиски листка бумаги или запуск калькулятора  лишь  ради  перевода  некоторого  числа  в,  скажем,  двоичную  систему  не  всегда

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

Вам известны основные единицы измерения количества информации: бит (0 или 1), ниббл (4 бита),  байт  (2  ниббла  или  8  бит).  В  некоторых  случаях  мы  встретимся  с  такой  единицей измерения, как «слово» (word) или «двойное слово» (double word). Одно слово равно двум байтам, а двойное слово соответственно четырем байтам (иногда двойное слово так и называют – четырехбайтовое слово).

Нас абсолютно не должны стеснять единицы измерения количества информации. Это не более сложно, чем измерение веса в граммах или килограммах. Нет никакой разницы между четырехбайтовым словом и 32 битами. Однако, как принято в некоторых случаях использовать выражение веса в граммах, миллиграммах, микрограммах (например, при дозировке лекарств), а в других случаях в тоннах, килотоннах, мегатоннах, так и количество информации в различных случаях принято измерять в битах, нибблах, байтах, словах и т.д. в зависимости от объема информации или от назначения этой информации.

Давайте посмотрим на некоторое число (к примеру 123), представленное в различных системах счисления:

123                    десятичное представление, используются цифры 0, 1, 2, 3, 4, 5, 6, 7, 8, 9

01111011          двоичное представления, используются цифры 0 и 1

173                    восьмеричное представление, используются цифры 0, 1, 2, 3, 4, 5, 6, 7

78                      шеснадцатиричное представление, используются цифры 0, 1, 2, 3, 4, 5, 6, 7, 8,

9, A, B, C, D, E, F. Причем, обратите внимание на то, что в данном случае A, B,  C,  D,  E,  F  –  именно  цифры,  написание  которых  просто  похоже  на написание букв, точно так же, как написание буквы З похоже на написание цифры 3.

Разложим десятичное число 123 на сумму степеней числа 10 с множителями:

123=1*10^2+2*10^1+3*10^0

Степени числа 10 соответствуют позициям цифр (сами цифры мы использовали в качестве множителя) в исходном десятичном числе. Позиции цифр нумеруются справа налево, нумерация начинается  с  нуля.  Каждая  позиция  цифры  называется  разрядом.  Число  123  –  трехразрядное число.

Теперь разложим двоичное число 01111011 (заметьте, его длина – один байт или восемь бит)

на сумму степеней числа 2 с множителями:

01111011=0*2^7+1*2^6+1*2^5+1*2^4+1*2^3+0*2^2+1*2^1+1*2^0

Степени числа 2 соответствуют позициям цифр (сами цифры мы использовали в качестве множителя) в исходном двоичном числе. Позиции цифр нумеруются справа налево, нумерация начинается с нуля. Каждая позиция цифры называется разрядом. Число 01111011 – восьмиразрядное число.

Разложим восьмиричное число 173 на сумму степеней числа 8 с множителями:

173=1*8^2+7*8^1+3*8^0

Степени числа 8 соответствуют позициям цифр (сами цифры мы использовали в качестве множителя)  в   исходном   восьмиричном   числе.   Позиции   цифр   нумеруются   справа   налево,

нумерация  начинается  с  нуля.  Каждая  позиция  цифры  называется  разрядом.  Число  173  –

трехразрядное число.

Разложим шеснадцатиричное число 78 на сумму степеней числа 16 с множителями:

78=7*16^1+8*16^0

Степени числа 16 соответствуют позициям цифр (сами цифры мы использовали в качестве множителя) в исходном шестнадцатиричном числе. Позиции цифр нумеруются справа налево, нумерация начинается с нуля. Каждая позиция цифры называется разрядом. Число 78 – двухразрядное число.

Мы с вами будем работать с тремя системами счисления: двоичной, десятичной и шестнадцатиричной.  Почему   так  важны   именно  эти  системы  счисления?  Как  вы  знаете, компьютер работает с двоичной системой счисления, поэтому многие величины представляются именно в этой системе. Человеку двоичная система неудобна, поскольку он привык пользоваться системой десятичной. Шестнадцатиричная же система является наиболее компактной для записи и позволяет представлять один байт в виде двух чисел.

Давайте мы с вами рассмотрим ряд алгоритмов, упрощающих перевод чисел из одной системы счисления в другую.

Начнем с перевода чисел из двоичной системы в десятичную. Для облегчения этого перевода нам необходимо запомнить всего восемь позиционных значений бит. Биты нумеруются от младшей, правой позиции до старшей, левой, начиная с нуля:

Номер бита

7

6

5

4

3

2

1

0

Степень числа 2

2^7

2^6

2^5

2^4

2^3

2^2

2^1

2^0

Значение степени

128

64

32

16

8

4

2

1

Теперь достаточно запомнить простое правило перевода из двоичной системы в десятичную. Если в какой-то позиции значение бита равно 1 (в этом случае еще говорят, что бит «установлен» в данной позиции), то мы к десятичному значению добавляем значение числа 2 в степени номера соответствующей позиции.

Приведем   пример.    Необходимо    перевести    в   десятичную    систему    число    10110011.

Рассматриваем число слева направо.

В седьмой позиции бит установлен. Десятичное значение бита в этой позиции равно 128.

В шестой позиции бит не установлен, следовательно, его десятичное значение равно 0.

В пятой позиции бит установлен. Десятичное значение 32.

В четвертой позиции бит установлен. Десятичное значение 16. В третьей позиции бит не установлен. Десятичное значение 0. Во второй позиции бит не установлен. Десятичное значение 0. В первой позиции бит установлен. Десятичное значение 2.

В нулевой позиции бит установлен. Десятичное значение 1.

Суммируем: 128+0+32+16+0+0+2+1=179.

Второй пример, менее подробно. Двоичное число 11000101. Соответствующие десятичные значения установленных и нулевых бит: 128+64+0+0+0+4+0+1=197.

Третий пример. Все биты установлены: 11111111. Соответствующее десятичное число будет:

128+64+32+16+8+4+2+1=255, как и следовало ожидать.

Как вы видите, алгоритм перевода байта из двоичной системы в десятичную очень прост. Однако, необходимо некоторое количество тренировок, чтобы выполнять этот перевод, как говорится, «со скоростью записи» – без пауз на вспоминание десятичного значения разряда и суммирование.    Поэтому    необходимо    выполнение    домашних    заданий    и    практика    без

использования калькулятора.  Впрочем, это требование относится к практике по любому переводу чисел между системами счисления.

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

Как мы знаем, максимальное значение байта равняется 255, а максимальное значение одиночного бита в старшем разряде – 128. Поэтому нам не придется иметь дела с чем-то более сложным. Чем выяснением, делится ли число, не превышающее 255 на число, не превышающее

128. Впрочем, давайте перейдем к примерам.

Переведем в двоичный формат число 217.

Сначала определим, будет ли установлен 7-й бит. Если при делении числа 217 на 128 (десятичное  значение  установленного  старшего  бита)  получится  ненулевое  частное, следовательно, бит установлен. Поскольку 255 больше, чем 128, то частное будет ненулевым, и мы записываем, что 7-й бит равен 1.

Установленный 7-й бит значит, что от числа 217 осталось в остатке после деления 217-

128=89.

Проверяем, установлен ли 6-й бит. 89 больше, чем 64 (десятичное значение шестого бита),

следовательно, 6-й бит установлен (равен 1), и в остатке остается 89-64=25.

Проверяем, установлен ли 5-й бит. 25 меньше, чем 32 (десятичное значение пятого бита),

следовательно, 5 бит равен 0.

Проверяем, установлен ли 4-й бит. 25 больше 16 (десятичное значение четвертого бита),

следовательно, 4-й бит равен 1, а в остатке остается 25-16=9.

Проверяем,  установлен  ли  3-й  бит.  9  больше  8  (десятичное  значение  третьего  бита),

следовательно, 3-й бит равен 1, а в остатке получаем 1.

Проверяем, установлен ли 2-й бит. 1 меньше, чем 4 (десятичное значение второго бита),

значит, второй бит равен нулю.

Проверяем, установлен ли 1-й бит. 1 меньше, чем 2 (десятичное значение первого бита),

значит, 1-й бит равен нулю.

Проверяем,  установлен  ли  нулевой  бит.  1  равно  1  (десятичное  значение  первого  бита), значит, первый бит равен единице, в остатке имеем ноль, следовательно, перевод числа закончен и мы можем указать значение двоичного числа: 11011001.

Рассмотрим второй пример. Переведем в двоичную систему счисления число 163.

163>128. Значит, 7-й бит равен 1, в остатке 163-128=35.

35 (остаток)<64. 6-й бит равен 0.

35 (остаток)>32. 5-й бит равен 1. Остаток 35-32=3.

3 (остаток)<16. 4-й бит равен 0.

3 (остаток)<8. 3-й бит равен 0.

3 (остаток)<4. второй бит равен 0.

3>2. первый бит равен 1. Остаток 3-2=1

1 (остаток) равен 1. Нулевой бит равен 1. Остаток 1-1=0 – перевод закончен, двоичное число равно 10100011

Третий пример. Переведем в двоичную систему счисления число 79.

79<128, 7-й бит – 0.

79>64, 6-й бит – 1, остаток 15.

15<32, 5-й бит – 0.

15<16, 4-й бит – 0.

15>8, 3-й бит – 1, остаток 7.

7>4, 2-й бит – 1, остаток 3.

3>2, 1-й бит – 1, остаток 1.

1=1,  0-й  бит  –  1,  остаток  0,  перевод  закончен,  двоичное  число  01001111.  Поскольку начальные нули можно отбрасывать, то число записывается как 1001111

Четвертый пример с визуальным представлением алгоритма.

Переведем число 119.

119<128

0

119>64

1

119-64=55>32

1

55-32=23>16

1

23-16=7<8

0

7>4

1

7-4=3>2

1

3-2=1=1

1

1-1=0  Перевод закончен.

Итог: 01110111=1110111

Переводить числа из шестнадцатиричной системы в двоичную и обратно намного проще. Для этого нужно только запомнить следующую таблицу соответствия:

«2»

«16»

«2»

«16»

«2»

«16»

«2»

«16»

0000

0

0100

4

1000

8

1100

C

0001

1

0101

5

1001

9

1101

D

0010

2

0110

6

1010

A

1110

E

0011

3

0111

7

1011

B

1111

F

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

Возьмем число 10110011. Для перевода необходимо разбить это число на группы по четыре цифры, начиная справа: 1011 0011. После этого каждую группу записать в шестнадцатиричном формате, в соответствии с таблицей: В3.

Аналогично: 10010010= 1001 0010 = 92; 10001110= 1000 1110 = 8E; 10101101= 1010 1101

=AD. Как быть, если количество цифр не кратно четырем, например: 101101. В этом случае мы дописываем   слева   нули   так,   чтобы   разбиение   на   группы   по   четыре   стало   возможным:

101101=00101101. Число от этого не изменилось, и получаем 00101101= 0010 1101 = 2D. Еще пример: 10110=00010110= 0001 0110 = 16.

Обратный перевод осуществляется так же просто:

7E=0111 1110=1111110

FF=1111 1111=11111111

C0=1100 0000=11000000

DB=1101 1011 и т.д.

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

Для перевода из десятичной в шестнадцатиричную просто делите десятичное число на 16, и записываете подряд частное и остаток в шестнадцатиричном формате (для чисел до 255!):

10=(10/16=0, 10 в остатке)=0х0А

37=(37/16=2, 5 в остатке)=0х25

194=(194/16=12, 2 в остатке)=0хС2

255=(255/16=15, 15 в остатке)=0xFF

Для обратного перевода первую шестнадцатиричную цифру представляете в десятичном формате, умножаете ее на 16 и прибавляете следующую, переведенную в десятичный формат, записывая результат в десятичном формате:

0хС0=12х16+0=192

0хВЕ=11х16+14=190

и т. д.

Кроме  перевода  чисел  между  разными  системами  счисления,  ознакомимся  с  одним удобным способом приближенного вычисления десятичного значения любой степени числа 2, пользуясь тем, что приблизительное значение 2^10=1024~~1000. Теперь становится легко подсчитать, например, приблизительное значение 2^16=2^10×2^6~~1000×64=64000.

Аналогично       получим       2^20=2^10×2^10~~1000×1000=1000000       (один       миллион);

2^32=2^2x(2^10)^3~~4×1000^3=4000000000 (4 миллиарда).

Автора: © Виталий Бочаров, Владимир Недеркин, Александр Трофимов

Вы можете следить за любыми ответами на эту запись через RSS 2.0 ленту. Вы можете оставить ответ, или trackback с вашего собственного сайта.

Оставьте отзыв

XHTML: Вы можете использовать следующие теги: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

 
Rambler's Top100