|
Электронный
мозг будет думать за нас точно так же, как электрический стул за нас умирает. |
|
Мультипликативные Примеры различных система счисления ... Восьмеричная Шестнадцатеричная
|
|
СТРАННАЯ
ДЕВОЧКА
Ей было тысяча сто лет. Но станет всё совсем обычным, -------------------- |
С
помощью двоичной системы кодирования можно зафиксировать любые данные
и знания. Это легко понять, если вспомнить принцип кодирования и
передачи информации с помощью азбуки Морзе.
Телеграфист,
используя только два символа этой азбуки - точки и тире, может
передать практически любой текст.
Объём памяти, хотя он и измеряется в байтах, обычно выражается в килобайтах. Слово "килобайт", вообще говоря, означает "1000 байт". (Напомним, что приставка "кило" означает "тысяча".)
Фактически же килобайт равен 1024 байтам: 1 Кбайт = 1024 байт.
Компьютер с объёмом памяти в 64 К может хранить 64 х 1024 = 65536 символов.
Объём памяти первых микрокомпьютеров составлял всего лишь 2 Кб. Нынешние компьютеры имеют объём памяти 128, 256, 512, 1024 Мб и более
Объём памяти новейших компьютеров так велик, что она выражается в гигабайтах, т. е. в миллиардах байтов.
1 Мбайт = 1024 Кбайт = 1 048 576 байт.
Итак, каждый символ алфавитно-цифровой информации
представляется в компьютере кодом из восьми двоичных цифр. Следовательно,
каждый символ в компьютере имеет код объёмом 1 байт.
имеет
в двоичной форме объём 25 байт: 23 буквы и 2 символа "пробел" по
1 байту.
Пример. Измерим в байтах объём текстовой информации в книге из 258 страниц, если на одной странице размещается в среднем 45 строк по 60 символов (включая пробелы). Один символ в двоичной форме содержит 1 байт. Строка будет содержать 61 байт, учитывая и служебный символ окончания строки. Тогда
61 байт * 45 строк = 2745 байт.
Так как в книге 258 страниц текста и на каждой странице в среднем по 2745 байт информации, то объём алфавитно-цифровой информации в книге
2745 байт * 258 страниц = 708210 байт " 692 Кбайт
Таким
образом, текст книги имеет объём около 692 Кбайт.
Для перевода десятичного числа в двоичное надо разделить его на 2 и собрать остатки, начиная с последнего частного.
7310 = 10010012
А вот как происходит перевод двоичного числа в десятичное:
В любой системе счисления нужно уметь представлять не только целые числа, но и дробные. С математической точки зрения это ординарная задача, которая давно решена. Однако с точки зрения компьютерной техники это далеко не тривиальная проблема, во многом связанная с архитектурой компьютера. Ресурсы компьютеров не бесконечны, и основной трудностью является представление периодических и непериодических дробей. Следовательно, такие дроби следует округлять, задавать класс точности участвующих (и могущих появиться в результате вычислений!) чисел без потери точности вычислений, а также следить за тем, чтобы потеря точности не произошла при переводе чисел из одной системы счисления в другую. Особенно важно аккуратно производить вычисления при операциях с плавающей точкой.
Запишем формулу представления дробного числа в позиционной системе счисления:
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
Таблицу степеней первых восьми отрицательных степеней двойки
Степень
основания
|
2
|
8
|
16
|
0 |
1 |
1 |
1 |
1 |
2 |
8 |
16 |
2 |
4 |
64 |
256 |
3 |
8 |
512 |
4096 |
4 |
16 |
4096 |
65536 |
5 |
32 |
32768 |
1048576 |
6 |
64 |
262144 |
16777216 |
7 |
128 |
2097152 |
268435456 |
8 |
256 |
16777216 |
4294967296 |
9 |
512 |
134217728 |
68719476736 |
10 |
1024 |
1073741824 |
1099511627776 |
11 |
2048 |
8589934552 |
17592186044416 |
12 |
4096 |
68719476736 |
281474976710656 |
13 |
8192 |
549755813888 |
4503599627370496 |
14 |
16384 |
4398046511104 |
72057594037927936 |
15 |
32768 |
35184372088832 |
1152921504606846976 |
16 |
65536 |
281474976710756 |
18446744073709551616 |
Перейдем теперь к вопросу представления отрицательных чисел. Для
определенности рассмотрим тип 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, способно привести к различным невероятным на первый взгляд результатам, однако гораздо более странные вещи происходят при работе с вещественными числами.
Над числами в двоичной системе счисления можно выполнять арифметические действия.
При этом используются следующие таблицы:
Сложение
|
Вычитание
|
Умножение
|
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
|
Рассмотрим примеры:
1 1 0 1 0 12 + 1 1 0 1 12 |
|
1 1 0 1 12 - 1 1 0 12 |
|
1 1 0 1 12 * 1 0 12 |
Для
деления в двоичной системе счисления нужно уметь сравнивать числа
(определять, какое больше) и хорошо вычитать. Посмотри деление на анимированном примере
Пример:
|
|
Еще
несколько примеров:
|
|
Несколько примеров для тренировки: |