Вы здесь: HomeВикиСистемы счисления

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

Cистема счисления.Различные системы счисления отличаются не только базовым набором чисел, но и основными концепциями, которые лежат в их основе. Взять, например, систему счисления, которая использовалась древними римлянами: она довольно трудна для восприятия, в ней очень сложно производить вычисления и невозможно представить 0. Данная система неудобна даже для человека,не говоря уж о том, чтобы научить компьютер «понимать» ее.
 
Десятичная система, которую мы используем всю жизнь, относится к классу так называемых позиционных систем счисления, в которых число А может быть представлено в виде:

A=a*Zn+a*Zn-1+...+a*Z1+a*Z


Здесь a — это цифры числа, a Z — основание системы счисления, в нашем случае — 10. Например, число 1234 можно представить так:

1234 = 1*103 + 2*102 + 3*101 + 4*100

 "Вес" каждой цифры определяется позицией цифры в числе и равен степени основания, соответствующей ее позиции.

При работе с различными системами счисления мы будем записывать само число в скобках, а за скобками — основание системы. Например, если написать просто число 1100, то не понятно, в какой системе оно записано — это может быть одна тысяча сто, а может быть 12, если число записано в двоичной системе. А если представить число в виде (1100)2, то сразу все становится на свои места: число записано в двоичной системе. Кстати, двоичная система тоже является позиционной, поэтому число 1100 в двоичной системе мы можем представить так: 

(1100)2 = 1*23 + 1*22+ 0*21 + 0*20


После сложения 8+4 мы получим, что (1100)2 равно 12. Как видите, все точно так же, как и с десятичной системой. Обратите внимание, что для представления числа 12 в двоичной системе использованы только четыре разряда. Наибольшее число, которое можно записать четырьмя двоичными цифрами, равно 15, потому что (1111) 2 = 1* 8 + 1* 4 + 1* 2 + 1*1 = 15. Давайте рассмотрим первые 16 чисел в таблице систем счисления:

Таблица систем счисления.

Числа растут равномерно, и нетрудно предположить, что 16 будет представлено в двоичной системе как (10000)2.

Восьмеричная система счисления (по основанию 8) состоит из большего количества цифр — из восьми (от 0 до 7). Преобразование из этой системы в десятичную систему полностью аналогично преобразованию из двоичной системы, например:

(77)8 = 7*81 + 7*81 

Восьмеричная система счисления использовалась в очень популярных ранее 8-битных компьютерах ATARI, ZX Spectrum и др. Позже она была заменена шестнадцатеричной системой, которая также будет рассмотрена ниже.

В шестнадцатеричной системе цифрами представлены только первые 10 чисел, а для представления остальных 5 чисел используются символы A-F: 

А = 10, В = 11, С = 12, D = 13, Е = 14, F = 15

Представим, как изменяется наш возраст в шестнадцатеричной системе: вы получили свой паспорт в 10 лет и стали совершеннолетним в 12 лет. Для шестнадцатеричной системы сохраняются те же принципы преобразования:

Число (524D)16 = 5*163 + 2*162 + 4*161 + 13*160 =

= 20 480 + 512 + 64 + 13 = 21 069

Число (DEAD) 16 = 13*163 + 14*162 + 10*161 + 13*160 = 57 005

Число (DEADBEEF)16 = 13*167 + 14*166 + 10*165 + 13*164 +

+ 11*163 + 14*162 + 14*161 + 15*160 = 3 735 928 559

Число (С001)16 = 12*163 + 0*162 + 0*161 + 1*160 = 49 153

 Перевод систем счисления

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

А теперь займемся обратным преобразованием — из десятичной системы в систему с основанием 2. Для обратного преобразования мы должны делить наше число на 2 и записывать остатки от деления до тех пор, пока частное от предыдущего деления не станет равно 0. Например, преобразуем 14 в двоичную систему:

14/2 = 7 остаток 0

7/2 = 3 остаток 1

3/2 = 1 остаток 1

1/2 = 0 остаток 1

Мы завершили процесс деления, когда последнее частное стало равно 0. Теперь запишем все остатки подряд от последнего к первому, и мы получим число в двоичной системе — (1110)2.

Рассмотрим еще один пример — преобразование числа 13 в двоичную систему:

13/2 - 6 остаток 1
6/2 = 3 остаток 0
3/2 = 1 остаток 1
1/2 = 0 остаток 1

Как и в прошлом случае, мы делили до тех пор, пока частное не стало равно 0. Если записать остатки снизу вверх, мы получим двоичное число (1101)2.

А теперь потренируемся с шестнадцатеричной системой — преобразуем число 123456 в эту систему:

123456/16 = 7716 остаток 0
7716/16 = 482        остаток 4
482/16 = 30 остаток 2
30/16 = 1 остаток 14 = Е
1/16 = 0 остаток 1

После записи всех остатков получим, что число 123 456 = (1Е240)16.

Запись со скобками и нижним индексом в тексте программы неудобна, по­ этому обычно используют следующие обозначения для записи чисел в различных системах счисления:

  • Запись шестнадцатеричного  числа начинается с Ох или $0 либо заканчивается символом «h». Если первая цифра шестнадцатеричного числа — символ A-F, то перед таким числом нужно обязательно написать 0, чтобы компилятор понял, что перед ним число, а не идентификатор, например, ODEADh. Таким образом, записи 0x1234, $01234 и 01234h (TASM понимает только такую запись 01234h) представляют число(1234)16 .
  • Десятичные числа могут записываться без изменений либо они заканчиваться постфиксом «d». Например, 1234 и 1234d представляют число(1234)10.
  • Двоичные цифры должны заканчиваться постфиксом «b», например, 1100b — это (1100)2.
  • Восьмеричные цифры заканчиваются на «q»: 12q — это (12)8.