Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
инф-госы теория и практика.doc
Скачиваний:
28
Добавлен:
29.08.2019
Размер:
3.77 Mб
Скачать

10. Системы счисления. Перевод чисел из одной системы счисления в другую

Как известно, системой счисления называется совокупность правил записи чисел. Системы счисления подразделяются на позиционные и непозиционные. Как позиционные, так и непозиционные системы счисления используют определенный набор символов- цифр, последовательное сочетание которых образует число. Непозиционные системы счисления появились раньше позиционных. Они характеризуются тем, что в них символы, обозначающие то или иное число, не меняют своего значения в зависимости от местоположения в записи этого числа. Классическим примером такой системы счисления является «римская». В ней для записи чисел используются буквы латинского алфавита. При этом I означает единицу, V— пять, Х- десять, L - пятьдесят, С - сто, D - пятьсот, М- тысячу. Для получения количественного эквивалента числа в римской системе счисления необходимо просто просуммировать количественные эквиваленты входящих в него цифр. Исключение из этого правила составляет случай, когда младшая цифра идет перед старшей, - в этом случае нужно не складывать, а вычитать число вхождений этой младшей цифры. К примеру, количественный эквивалент числа 577 в римской системе счисления - это DLXXVII=500+50+10+10+5+l+l=577. Другой пример: CDXXIX=500-100+10+10-1+10=429.

В позиционной системе счисления количество символов в наборе равно основанию системы счисления. Место каждой цифры в числе называется позицией. Номер позиции символа (за вычетом единицы) в числе называется разрядом. Разряд 0 называется младшим разрядом. Каждой цифре соответствует определенный количественный эквивалент. Введем обозначение- запись А(р) будем обозначать количественный эквивалент числа А, состоящего из n цифр ak (где к=0,...,n-1) в системе счисления с основанием р. Это число можно представить в виде последовательности цифр: А(р) = an-lan-2...ala0 . При этом, конечно, всегда выполняется неравенство ак<р.

В общем случае количественный эквивалент некоторого положительного числа А в позиционной системе счисления можно представить выражением: А(р) = an-1 * pn-1 + аn-2n-2+... + а1 * р1 + а0 * р0 где: р - основание системы счисления (некоторое целое положительное число); а - цифра данной системы счисления; n - номер старшего разряда числа.

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

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

Набор цифр для двоичной системы счисления: (0, 1) основание степени = 2.

Количественный эквивалент некоторого целого n - значного двоичного числа вычисляется согласно формуле : A(2) = an-1 * 2n-1 + аn-2 * 2n-2 +... + а1 * 21 + а0 * 20.

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

В ычислим количественный эквивалент этого двоичного числа. Согласно формуле, это будет величина, равная следующей сумме: 1*27+0*26+1*25+0*24+0*23+1*22+1*21+1*20 = 128+0+32+0+0+4+1 = = 165

Сложение и вычитание двоичных чисел выполняется так же, как и для других позиционных систем счисления, например десятичной. Точно так же выполняются заем и перенос единиц. К примеру:

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

Данная система счисления имеет следующий набор цифр: {0, 1, 2, ..., 9, А, В, С, D, E, F}, основание системы = 16. Количественный эквивалент некоторого целого шестнадцатеричного числа вычисляется согласно формуле: A(16) = an-1 * 16n-1 + аn-2 * 16n-2 +... + а1 * 161 + а0 * 160.

К примеру, количественный эквивалент шестнадцатеричного числа F45ED23C = 15*167 + 4*166 + +5*165 + 14*164+13*163+2*162+3*161+12*160 = 4099854908

Шестнадцатеричная система счисления при производстве вычислений несколько сложнее, чем двоичная, в частности, в том, что касается правил переносов в старшие разряды (заемов из старших разрядов). Главное здесь - помнить следующее равенство:

Эти переходы очень важны при выполнении сложения и вычитания шестнадцатеричных чисел.

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

Это наиболее известная система счисления, так как она постоянно используется нами в повседневной жизни. Данная система счисления имеет следующий набор цифр: {0,1, 2, 3, 4, 5, б, 7, 8, 9}, основание степени =10. Количественный эквивалент некоторого целого n- значного десятичного числа вычисляется согласно формуле: A(10) = an-1 * 10n-1 + аn-2 * 10n-2 +... + а1 * 101 + а0 * 100.

К примеру, значение числа А(10) = 4523 = 4*103+5*102+2*101+3*100.

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

Этот тип перевода наиболее прост. Обычно его производят с помощью так называемого алгоритма замещения, суть которого заключается в следующем: сначала в десятичную систему счисления переводится основание степени р, а затем - цифры исходного числа. Результаты подставляются в формулу (р) = an-1 * pn-1 + аn-2n-2+... + а1 * р1 + а0 * р0. Полученная сумма и будет искомым результатом.

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

Разделить десятичное число А на 2. Запомнить частное q и остаток а. Если в результате шага 1 частное q≠0, то принять его за новое делимое и отметить остаток а, на который будет очередной значащей цифрой числа, вернуться к шагу 1, на котором в качестве делимого (десятичного числа) участвует полученное на шаге 2 частное. Если в результате шага 1 частное q =0, алгоритм прекращается. Выписать остатки в порядке, обратном их получению. Получится двоичный эквивалент исходного числа.

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

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

К примеру, требуется перевести число

11100101101011110101100011011000111101010101101 в шестнадцатеричную систему счисления.

Разобьем его на тетрады:

0111 0010 1101 0111 1010 1100 0110 1100 0111 1010 1010 1101. По тетрадам приводим последовательности нулей и единиц к шестнадцатеричному представлению: 72D7AC6C7AAD.

Перевод дробных чисел.

Для дробных чисел, формула записывается в следующем виде:

A(p)= an-1 * pn-1 + аn-2 * pn-2 +... + а1 * p1 + а0 * p0+ a_1 * p-1 + а_2 * p-2 +... + аm * p-m.

Переведем дробную часть десятичного числа 108.406 (10) по алгоритму, приведенному выше.

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

Рис. Перевод дробной части числа 108.406 (10) в двоичную систему счисления

Р езультат перевода следующий: 108.406 (10) =1101100,011001111 При переводе дробного числа из десятичной системы счисления в шестнадцатеричную целесообразно предварительно перевести число в двоичную систему. Затем двоичное представление разбить на тетрады отдельно до запятой и после запятой. Разбиение на тетрады двоичных разрядов целой части производят от запятой в сторону старших разрядов. Неполную старшую тетраду дополняют слева ведущими нулями. Разряды дробной части, напротив, разбивают на тетрады от запятой вправо к младшим разрядам. Если последняя тетрада неполная, то ее дополняют справа нулями.

Ч исла со знаком.

До сих пор предполагалось, что числа положительные. А как представляются в компьютере числа со знаком?

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

Дополнительный код некоторого отрицательного числа представляет собой результат инвертирования (замены 1 на 0 и наоборот) каждого бита двоичного числа, равного по модулю исходного отрицательного числа плюс единица. К примеру, рассмотрим десятичное число - 18510. Модуль данного числа в двоичном представлении равен 101110012. Сначала нужно дополнить это значение слева нулями до нужной размерности - байта, слова и т. д. В нашем случае дополнить нужно до слова, так как диапазон представления знаковых чисел в байте составляет -128... 127. Следующее действие -получить двоичное дополнение. Для этого все разряды двоичного числа нужно инвертировать:

00000000101110012. -> 11111111010001102. Теперь прибавляем единицу:

11111111010001102+00000000000000012 =11111111010001112.

Результат преобразования равен 11111111010001112. Именно так и представляется число -18510 в компьютере.

При работе с числами со знаком от вас наверняка потребуется умение выполнять обратное действие - имея двоичное дополнение числа, определить значение его модуля. Для этого необходимо выполнить два действия:

  1. Выполнить инвертирование битов двоичного дополнения.

  2. К полученному двоичному числу прибавить двоичную единицу.

К примеру, определим модуль двоичного представления числа - 18510 =11111111010001112:

11111111010001112 -> инвертируем биты -> 00000000101110002. Добавляем двоичную единицу:

00000000101110002 + 00000000000000012 = 00000000101110012 = |-185|. Теперь вам должно быть понятно, откуда появилась разница в диапазонах значений для чисел со знаком и без знака простых типов данных, обсуждавшихся на уроке 2. Теперь мы почти готовы разговаривать с компьютером на его языке, состоящем из команд и данных. С данными мы уже разобрались, теперь давайте обратимся к командам.