Логотип

Основы цифровой техники 

материалы в категории

Представление чисел в логических элементах

Итак: во всех цифровых устройствах все сигналы принимаются лишь в двух видах: или есть сигнал, или его нету. Есть сигнал- значит логическая единица, нету сигнала- логический ноль. Так как здесь всего-лишь два значения (ноль и единица), то такая система счисления называется двоичным кодом.

Но только вот в чем незадача: мы-то все с вами привыкли к тому все все числа имеют десятичный код: от 0 до 9...

Откуда он вообще взялся, код-то этот, десятичный и почему мы все так к нему привыкли и в школе математику изучали именно с цифрами 0...9?
А ведь все легко и просто: у нас 10 пальцев на руках и люди считать научились еще задолго до появления всяких там наук: один палец плюс второй палец, будет два и так далее. Было-бы у нас по шесть пальцев на каждой руке, то и считали-бы мы уже в двенадцатиричной системе исчисления...
Впрочем, мы немного отвлеклись...

Двоичный код потому двоичный, что в нем используются степени числа 2. Вся фишка состоит в том, что двоичный код есть сумма произведений вот этих 2n чисел на 0 или 1, ну в случае умножения на нуль получаем нуль. Числа 2n называются весовыми коэффициентами.
Сложив пару-тройку чисел формата 0x2
3+1x22+0x21+1x20 получим желаемую величину, в данном случае цифру 5. В примере знак x не всеми любимая буква, а знак умножения. Вопрос: "Почему именно 5?".
Считаем: 0 на что-либо равно ноль, 2 во второй равно 4, любое число в степени 0 есть единица (математика, однако, школьный курс...). Складываем 4 и 1 получаем 5.
Более понятно это можно показать таблицей, которую можно назвать таблицей перевода десятичных чисел в двоичные и, кстати, наоборот.

Десятичное число Весовые коэффициенты
23 22 21 20
0 0 0 0 0
1 0 0 0 1
2 0 0 1 0
3 0 0 1 1
4 0 1 0 0
5 0 1 0 1
6 0 1 1 0
7 0 1 1 1
8 1 0 0 0
9 1 0 0 1
10 1 0 1 0
11 1 0 1 1
12 1 1 0 0
13 1 1 0 1
14 1 1 1 0
15 1 1 1 1

Чет фигня какая-то...
Объясняю, в чем суть. Во-первых, двоичные числа читают справа налево. Самое правое число (0 или 1) называется младшим разрядом, самое левое - старшим разрядом. В таблице показаны коды 4-х разрядных двоичных чисел, причем 20 есть младший разряд числа, 23 старший разряд. Чем выше степень весового коэффициента старшего разряда (2n), тем выше разрядность двоичного числа.


Суть перевода двоичного числа в десятичное заключается в сумме всех весовых коэффициентов, причем, единицы и нули показывают, какие коэффициенты складывать. Если в коде числа стоит 1, то весовой коэффициент, соответствующий этой единице, складывается со следующим весовым коэффициентом, т. е. со следующим в разряде числе. Если в коде числа стоит 0, то весовой коэффициент, соответствующий этому нулю, будет равен нулю, поскольку любое число, умноженное на 0 есть не что иное, как 0.
Ну вот например:, есть двоичное число 1011, чтобы перевести его в десятичное надо первый символ (в данном случае 1) умножить на соответствующий ему весовой коэффициент (в данном случае 23=8), прибавить следующий символ (0 x 22) и так далее.
Получается примерно так: 1 x 2
3 + 0 x 22 + 1 x 21 + 1 x 20 = 11. Принцип ясен?

Очевидно, что для всего этого необходимо иметь представление о степенях числа 2. Вот табличка со значением степеней числа 2 вплоть до 215

 

Степень 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
Число 0 2 4 8 16 32 64 128 256 512 1024 2048 4096 8192 16384 32768

Особо наблюдательные может быть заметили в первой таблице одну закономерность. В младшем разряде поочередно меняется 0 и 1. В следующем разряде - два нуля и две единицы, в следующем - четыре нуля и четыре единицы. Таким образом, зная эту закономерность, запоминать эту таблицу не требуется. Всегда можно где-нибудь нарисовать нолики и единички и перевести двоичные числа. Также следует отметить, что 4 разряда не предел. Если слева пририсовать еще нули и единицы, получим 5-ти разрядный код и т. д. до бесконечности. Суть понятна?

Каждая единица либо ноль, т. е. один разряд в двоичном коде называется битом, соответственно, в первой таблице все числа четырехбитные. Восьмиразрядное двоичное число называется байтом, т. е. в одном байте восемь бит. Еще восьмиразрядное двоичное число называется словом. Т. е. слово - это 1 байт или 8 бит, или для тех, кто в танке, в слове 8 циферок, каждая из которых принимает значение 0 или 1.

Ахтунг: в цифровой технике считают от 0, а не как мы - от 1. Т. е. максимальное число в 4-х разрядном двоичном коде не 16, а 15, в пятиразрядном - 31, а не 32 и т. п.

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

Восьмеричный код

Этот код аналогичен двоичному, только разрядов 3 и максимальное число будет равно 7 (в двоичном коде 111). Подобный код почти не используется, да и в некоторых книгах про него вообще ничего не пишут. Просто он есть.

Двоично-десятичный код

Двоично-десятичный код также полностью аналогичен двоичному. Единственное отличие состоит в том, что в десятичном эквиваленте такой код представляется, как ряд чисел от 0 до 9. То есть, если посмотреть на первую таблицу, до числа 9 двоичные коды будут двоично-десятичными, после числа 9 - просто двоичными. По аналогии с десятичными числами, чтобы представить, допустим, число 243 в двоично-десятичном коде, необходимо взять двоичный эквивалент чисел 2, 4 и 3. Т. е. 243=0010 0100 0011. Каждая четырехразрядная группа двоично-десятичного кода называется тетрадой. Т. е. число 243 мы записали в виде трех тетрад, или по аналогии с десятичными числами - комбинацией тетрад. Двоично-десятичный код используется для индикации чисел в цифровых индикаторах.

Шестнадцатеричный код

Иногда шестнадцатеричный код называется гексагональным. Такой код широко используется в вычислительной технике. Еще он называется код с основанием 16(двоичный зовут с основанием 2). В отображении шестнадцатеричного кода используются цифры от 0 до 9 и первые буквы латинского алфавита A, B, C, D, E, F. Если в двоичном коде используются степени числа 2 (см. выше), то в шестнадцатеричном коде - степени числа 16. Например, число 157 представляется, как 9 x 161 + D x 160, т. е. 157=9D. Вообще же, шестнадцатеричный код в основном используется для упрощения представления двоичных чисел. Посмотрите, для отображения числа 157 потребовался бы 8-ми разрядный двоичный код (а именно 1001 1101), а в 16-тиричном коде число содержит всего 2 символа (9D).

Ахтунг: сами устройства этот код и все другие (в том числе и двоичный) вообще не воспринимают и никак на него не реагируют. В устройствах используются лишь перепады напряжения источника питания, которые символически обозначают 0 и 1. И все коды предназначаются для объяснения работы устройств.

Перевод чисел из разных систем счисления

Теперь немного узнав о системах счисления хорошо бы освоить перевод чисел из одной системы в другую. Начнем с перевода десятичного числа в двоичное. Для отображения чисел в разных системах используются нижние индексы, например, число10 - десятичное число, число2 - двоичное число, число16 или числоH - 16-тиричное число.

Для перевода десятичного числа в двоичное нужно десятичное число делить на 2 до получения минимального остатка. При делении десятичного числа на 2 образуются остатки, равные 0 или 1. Первый остаток будет младшим разрядом. Последний остаток будет предпоследним перед старшим разрядом. Результат деления последнего числа является старшим разрядом и он всегда равен 1. Например, переведем число 21 в двоичный код.

21/2=10 Остаток 1
10/2=5 Остаток 0
5/2=2 Остаток 1
2/2=1 Остаток 0

Последнее число 2/2=1. Эта единица идет в старший разряд. В следующий разряд идет остаток от этого деления (0) и т. д. до последнего разряда, т. е. считаем снизу вверх. В результате деления получили код 10101. Проверим: 16 + 4 + 1 = 21. Ты гляди, работает! А ну-ка, переведем число посложней, типа 274.

274/2=137 Остаток 0
137/2=68 Остаток 1
68/2=34 Остаток 0
34/2=17 Остаток 0
17/2=8 Остаток 1
8/2=4 Остаток 0
4/2=2 Остаток 0
2/2=1 Остаток 0

Полученное число 1 0001 0010. Проверим: 256 + 16 + 2 = 274. Работает!

Итак, суть понятна? Для простоты и экономии места на странице умножение нулей на весовые коэффициенты не показано. То есть, для первого примера полный формат имеет вид: 1 x 16 + 0 x 8 + 1 x 4 + 0 x 2 + 1 x 1 = 21.

Можно переводить и по-другому. Лично мне удобней переводить так:
Если имеется какое-то число, например, 43, оно, как видно, меньше 64, но больше 32, значит первые два разряда 01. Из 43 вычитаем 32 получаем 11. Разряд с весовым коэффициентом 16 здесь не канает, ставим 0. Число 11 представляется как 1011 (см. первую таблицу). Итого имеем: 0010 1011. Первые два нуля стоят для красоты.

Как же перевести наоборот, из двоичного в десятичное. Еще проще. Это написано чуть-чуть выше, где проверяется результат перевода десятичного числа в двоичное. Допустим есть число 1011 0101. Где стоит 1, имеет право на жизнь весовой коэффициент, где 0 - весовые коэффициенты "сдохли". Считаем: 128 + 0 + 32 + 16 + 0 + 4 + 0 + 1 = 181. Для тренировки можете проверить переводом его в двоичное.

Перевод шестнадцатеричных чисел туда сюда осуществляется аналогично. Делим десятичное число на 16 до получения остатка, причем меньшего 16. При делении десятичного числа остатки получаются в виде ряда чисел от 0 до 15. Числа от 10 до 15 заменяются буквами латинского алфавита A, B, C, D, E, F. Как и при переводе в двоичный код, последний остаток предшествует старшему разряду, результат деления последнего числа есть старший разряд. Переведем число 845 в 16-тиричный код.

845/16 = 52 Остаток 13 = D
52/16= 3 Остаток 4

Полученное число 34D. Проверим: 3 х 162 + 4 x 161 + D x 160 = 845. D в шестнадцатеричном коде эквивалентно 13. Здесь также показан и обратный перевод. Умножаем числа 16-тиричного кода на 16 в степени и складываем.

Для перевода 16-тиричного кода в двоичный достаточно разбить число на отдельные символы (числа) которым соответствуют двоичные эквиваленты. То есть, то же число 34D разбиваем на 3, 4 и D и записываем двоичный код каждого элемента: 3 = 0011, 4 = 0100, D = 1101. 34D = 0011 0100 1101. Вот так, 10-разрядное двоичное число в 16-тиричном эквиваленте записывается всего тремя символами. Понятно, зачем шестнадцатеричный код? Для обратного перевода двоичное число разбивается на тетрады и каждой тетраде ставится в соответствие шестнадцатеричный эквивалент. Причем разбиение ведется справа налево. Если последняя тетрада не получается, т. е. в старшей тетраде всего 1, 2 или 3 единицы, к ним дописывают нули. Получается как в последнем примере, первые два нуля образуют тетраду совместно с единицами (число 3).

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

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

Математические операции с двоичными числами

Математические операции над двоичными кодами просты до безобразия, по сравнению с десятичными цифрами.

Операция сложения выглядит так:

  1101
+        
  0110
10011

В десятичном эквиваленте это 13 + 6 = 19. Следует помнить, что при сложении двух едениц получается ноль, а единица переносится в старший разряд.

Еще проще операция умножения:

    1011   
х        
      110       
  0000
  1011    
1011      
1000010

При умножении на разряд множимое либо повторяется, либо записываются нули. В данном случае была произведена операция умножения 11 х 6 = 66.

Примечание: основная часть материала с сайта http://naf-st.ru

Почта сайта