Метод хранения информации в виде закодированных символов неэффективен для работы с числовой информацией.
Например, как будет храниться число 17? В стандарте ASCII, используется 1 байт памяти для каждого символа. Таким образом, нам потребуется в общей сумме 16 битов. А, самое большое число, которое мы можем представить, используя 16 битов, это 99. Поэтому более эффективным является хранение числового значения в двоичном представлении.
Двоичное представление (binary notation) — это запись числовых значений, в которой используются только 0 и 1, а не 0, 1, 2, 3, 4, 5, 6, 7, 8 и 9, как в традиционной, десятичной, системе счисления.
Напомним, что в десятичной системе счисления каждой позиции в записи числа соответствует определенный разряд. В записи числа 281 цифра 1 занимает позицию единиц, 8 — позицию десятков, 2 — позицию сотен.
3 | 7 | 5 |
Запись числа
Рис. 1.3. Разрядность записи чисел
При смещении по записи числа влево вес разряда увеличивается в десять раз. Значение, представленное записью, можно получить, умножив значение каждого числа на вес его разряда и затем сложив полученные произведения. Например, запись 281 имеет вид:
(2 х 100) + (8 х 10) + (1 х 1).
В двоичном представлении каждая позиция в записи числа также соответствует определенному разряду. При движении по записи числа влево вес разряда каждый раз увеличивается в два раза.
Более точно, вес разряда последнего числа справа равен единице (2°), вес разряда следующего числа равен двум (21), следующего — четырем (22), следующего — восьми (23) и т. д.
Например, в двоичной записи 1101 самая крайняя справа 1 соответствует весу разряда, равному единице, следующий ноль — весу разряда, равному двум, 1 соответствует весу разряда, равному четырем, а самая крайняя слева 1 — весу разряда, равному восьми.
Чтобы получить значение, представленное двоичной записью, выполняем те же действия, как в случае с десятичной системой счисления: умножаем значение каждой цифры на вес соответствующего разряда и складываем полученные произведения.
Вес разряда |
1 | 0 | 1 | 1 |
Запись числа
Рис. 1.4 Вес разрядов
Например, значение, имеющее запись 100101, равно 37.
Важно, что в двоичном представлении используются только 0 и 1, и получение значения числа сводится к суммированию тех разрядов, в которых в записи стоит единица.
1 | 1Г0о" | 1 | 1 | 0 | 1 | Вес разряда | |
1 | х Один = 1 | ||||||
0 | х Два = 0 | ||||||
1 | х Четыре = 4 | ||||||
1 | х Восемь = 8 | ||||||
1 | х Шестнадцать = 16 | ||||||
1 | х Тридцать два = 32 |
Двоичная запись
Значение бита Сумма = 61
Рис. 1.5. Представление двоичных чисел
Еще один пример. Двоичная запись 1101 имеет значение 13, так как единицы соответствуют разрядам 1, 3 и 4.
Последовательность двоичных записей, соответствующих десятичным числам от 0 до 8, выглядит следующим образом: 0, 1, 10, 11, 100, 101, 110, 111, 1000.
Для получения двоичной записи больших положительных чисел можно использовать систематический подход, описываемый алгоритмом.
Шаг 1. Делим число на два и запишем остаток деления.
Шаг 2. Продолжаем делить частные на два и записывать остаток до тех пор, пока частное не будет равно нулю.
Шаг 3. Когда частное станет равно нулю, двоичная запись числа будет состоять из остатков деления, выписанных справа налево в том порядке, в каком они были получены.
Попробуем применить этот алгоритм к числу 13. Сначала делим тринадцать на два, получаем частное, равное шести, и единицу в остатке; так как частное не равно нулю, делим его на два в соответствии с шагом 2. В результате имеем новое частное, равное трем, и ноль в остатке. Это частное также не равно нулю, поэтому делим его на два, получая частное, равное единице, и два в остатке. Еще раз делим частное (единицу) на два, в этот раз частное равно нулю, а остаток единице. Так как мы получили в результате деления ноль, то переходим к третьему шагу и получаем двоичную запись исходного значения (тринадцать), которая имеет вид 1101.
Рис. 1.6. Преобразование числа 13 в двоичную форму записи
Теперь вспомним, что представление числа 17 в начале раздела (двумя байтами), и, что таким образом можно представить самое большое число 99. Становится видно, если мы будем использовать двоичное представление, мы сможем хранить целые числа в интервале от 0 до 65 535, что является значительным усовершенствованием.
Таким образом, числовую информацию принято хранить в виде двоичной записи, а не в виде закодированных символов. Речь идет о «в виде двоичной записи», потому что обычная двоичная система счисления описывает только основы нескольких способов хранения числовой информации, используемые в машинах.
Важно, что для хранения целых чисел принята система кодирования, которая называется представлением в дополнительном коде, которая дает возможность кодирования и положительных, и отрицательных чисел.
Для хранения чисел с дробной частью, таких как 3*/2 или 3/4, используется другая форма, называемая представлением чисел с плавающей точкой. Таким образом, отдельное значение (например, 15) может быть представлено различными последовательностями битов (как символ, закодированный в стандарте ASCII; в представлении в дополнительном коде или в форме с плавающей точкой, как 150/2), и наоборот, отдельную последовательность битов можно интерпретировать по-разному.
При этом надо помнить, что независимо от размера области памяти, которую машина может выделить для хранения числового значения, все равно будут появляться слишком большие целые числа или слишком маленькие дроби, не помещающиеся в эту область. В связи с этим всегда существует возможность ошибок, таких как переполнение (число слишком большое) или усечение (дробь слишком маленькая). С ними необходимо бороться, иначе ничего не подозревающий пользователь столкнется с множеством ошибочных данных.
1.
1.1.
1.2.
1.3.
1.4.
1.5.
1.6.
1.6.1.
1.6.2.