ФЭНДОМ


Орлова Е.А.Править

В компьютерной технике очень часто используется двоичная система счисления. Такую систему очень легко реализовать в электронике (полупроводниковые транзисторы и микросхемы), так как для неё требуется всего два устойчивых состояния (0 и 1).

Двоичная система счисления может быть непозиционной и позиционной системой. В ней используется две цифры: 0 и 1. В реальном устройстве это может быть реализовано присутствием какого-либо физического явления или его отсутствием. Например: есть электрический заряд или его нет, есть напряжение или нет, есть ток или нет, есть сопротивление или нет, отражает свет или нет, намагничено или не намагничено, есть отверстие или нет и т.п.

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

·       33 : 2 = 16 остаток 1;

·       16 : 2 = 8 остаток 0;

·       8 : 2 = 4 остаток 0;

·       4 : 2 = 2 остаток 0;

·       2 : 2 = 1 остаток 0;

·       1 : 2 = 0 остаток 1;

Получили 100001.

Возьмём число 55. Посмотрим, что получится.

·       55 : 2 = 27 остаток 1;

·       27 : 2 = 13 остаток 1;

·       13 : 2 = 6 остаток 1;

·       6 : 2 = 3 остаток 0;

·       3 : 2 = 1 остаток 1;

·       1 : 2 = 0 остаток 1.

Получили 110111.

Двоичная арифметика

Над числами в двоичной системе счисления можно выполнять арифметические действия.

При этом используются следующие таблицы:

Сложение

Вычитание

Умножение

0+0=0

0-0=0

0*0=0

1+0=1

1-0=1

1*0=0

0+1=1

1-1=0

0*1=0

1+1=10

10-1=1

1*1=1

ДРОБНЫЕ ЧИСЛА В ДВОИЧНОЙ СИСТЕМЕ СЧИСЛЕНИЯ

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

Запишем формулу представления дробного числа в позиционной системе счисления: 

Ap = an-1·pn-1+an-2·pn-2 + ... + a1·p1+a0·p0 +a-1·p-1+a-2·p-2 + ... + a-m·p-m,       

В случае десятичной системы счисления получим:

24,7310 = (2·101+4·100+7·10-1+3·10-2)10

Перевод дробного числа из двоичной системы счисления в десятичную производится по следующей схеме:

101101,1012 = (1·25+0·24+1·23+1·22+0·21+1·20+1·2-1+0·2-2+1·2-3)10=45,62510

Перевод дробного числа из десятичной системы счисления в двоичную осуществляется по следующему алгоритму:

·  Вначале переводится целая часть десятичной дроби в двоичную систему счисления;

·  Затем дробная часть десятичной дроби умножается на основание двоичной системы счисления;

·  В полученном произведении выделяется целая часть, которая принимается в качестве значения первого после запятой разряда числа в двоичной системе счисления;

·  Алгоритм завершается, если дробная часть полученного произведения равна нулю или если достигнута требуемая точность вычислений. В противном случае вычисления продолжаются с предыдущего шага.

Пример: Требуется перевести дробное десятичное число 206,116 в дробное двоичное число.

Перевод целой части дает 20610=110011102 по ранее описанным алгоритмам; дробную часть умножаем на основание 2, занося целые части произведения в разряды после запятой искомого дробного двоичного числа:

 .116 • 2 = 0.232

.232 • 2 = 0.464

.464 • 2 = 0.928

.928 • 2 = 1.856

.856 • 2 = 1.612

.612 • 2 = 1.224

.224 • 2 = 0.448

.448 • 2 = 0.896

.896 • 2 =1.792

.792 • 2 = 1.584

и т.д.

Получим: 206,11610=11001110,00011100112

Отрицательные числа

Перейдем теперь к вопросу представления отрицательных чисел. Для определенности рассмотрим типbyte, в котором любое число занимает ровно восемь бит. Из записи в двоичной системе счисления равенства (- 1) + 1 = 0 легко найти, какой вид должно иметь неизвестное нам пока двоичное представление xxxxxxxx числа - 1:

    xxxxxxxx + 00000001 = 00000000     

Ясно, что на месте символов xxxxxxxx должно быть расположено число 11111111. Правильным результатом при этом, конечно, следовало бы считать 100000000, а не 00000000, но ведь мы имеем дело с типом byte и, так как результат обязан разместиться в байте, единица <<исчезает>>.

Итак, число - 1 должно кодироваться как 11111111. Дальнейшее уже совсем просто: для получения - 2нужно - 1 уменьшить на единицу, что даст 11111110; число - 3 представляется как 11111101 и т.д.

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

Легко видеть, что при этом самым маленьким отрицательным числом, которое принадлежит типу byte, является число - 128 (двоичное представление 10000000), а самым большим -- число 127(представление 01111111). Все представимыe числа (а их 256) в данном случае могут быть получены как пересечение двух множеств: множества Z всех целых чисел и отрезка [ - 128; 127 ].

Интересным является следующее наблюдение: если число 01111111 увеличить на единицу, то получится10000000, что означает следующее:

127 + 1 = - 128 !!!

Итак, множество элементов типа byte можно представлять себе в виде свернутого в кольцо отрезка [ - 128; 127 ].

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

Обнаружено использование расширения AdBlock.


Викия — это свободный ресурс, который существует и развивается за счёт рекламы. Для блокирующих рекламу пользователей мы предоставляем модифицированную версию сайта.

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

Также на ФЭНДОМЕ

Случайная вики