Теперь о переводе в десятичную систему:
перевод осуществляестся по тому же
принципу, что и в шестнадцатеричной, т.е: 101101b = 1 * 2 5 + 0 * 2 4 + 1 * 2 3
+ 1 * 2 2 + 0 * 2 1 + 1 * 2 0 = 45 = 2Dh
Для тех, кто не очень внимательно читал
предыдущий выпуск, повторюсь: берём
самую правую цифру и умножаем на 2 в 0
степени, сдвигаемся на одну цифру влево
и умножаем на 2 в 1, ......... и т.д. пока не
дойдём до конца. Вся сложность этого
метода состоит в том, что нужно помнить
много степеней 2 (или той системы из
которой переводим), на первый взгляд это
тяжело, но по-переводив пару сотен чисел
степени запомнятся сами собой. Как можно
заметить, этот метод годится для
перевода чисел из любых систем
счисления в 10-ую, только нужно домножать
на основание системы.
Теперь о переводе наоборот: из 10-ой в 2-ую.
Тут тоже действует уже, надеюсь,
известный вам способ деления, т.е. число
делим на 2; число получившеесе в остатке
является младшей двоичной цифрой. Затем
уже частное поделить на 2 и полученый
остаток даст следующую влево 2-ую
цифру. Продолжая таким образом пока в
частном не получится 0, из остатков
получим все необходимые 2-ые цифры.
Частное
Остаток
Двоичная цифра
45 / 2
22
1
1 (младшая цифра)
22 / 2
11
0
0
11 / 2
5
1
1
5 / 2
2
1
1
2 / 2
1
0
0
1 / 2
0
1
1 (старшая цифра)
Тут также нет ничего сложного.
Теперь о переводе в шестнадцатеричную
систему: тут алгоритм посложнее: начиная
с правой цифры разбиваете число на
соответствующие 16-ой системе. Ясно это
будет из дальнейших примеров: 101101b разбиваем справа: 1b = 1h, 01b=1h, 101b=5h
1101b=Dh СТОП! Первая правая цифра уже
есть! Рассмотрим оставшуюся часть: 10b =
2h, и следовательно наше число 101101b = 2Dh.
Почему мы остановились после 1101b ? Просто
потому, что 01101b=Dh, а 101101b > Fh, а нам
нужно получить только одну цифру
числа.
Ещё один пример, показан он по другому: 10101011b = (1010)(1011)b = ABh Т.е. нужно
запомнить первые 16 чисел 2-ой системы и
тогда сразу будет видно, когда нужно
остановиться. Число 01011b так же равно Bh,
но при этом нуль слева нам совсем не
нужен, т.к. он не играет никаой роли, т.е.
мы можем дополнить число любым
количеством нулей слева и поэтому этот
на этот нуль мы не смотрим, а следущее
число 101011b > Fh = 1111b и значит мы
производим разбивку по 4-ой цифре, т.е.
(1010)b и (1011)b. Это и даёт нам конечный
результат.
Двойчная арифметика. Сейчас мы заново
научимся складывать числа столбиком :)
1011101 +1111001
11010110
Правила всё те же, что и для десятичной
системы, но нужно помнить, что 1b + 1b = 10b.
Вычитание - это всё наоборот, 10b - 1b = 1b, а
правила - знакомые со школы!
А теперь поговорим об отрицательных
числах. Начнём с простого числа (-1). Как
же можно представить его в двоичном виде
??
Ответ кроется в следуещем соображении: (-а)
= 0 - а :))) Тут вроде бы всё ясно, НО
какой глубокий смысл! Рассмотрим число
(-1): (-1) = 0 - 1, а теперь в двоичном виде:
000000000 -000000001
111111111
Какаво ??? Удивительно, но это логично:
попробуйте к 111111111111b прибавить 000001b и
получится 0 !!!! Это очень интересное
свойство двоичных чисел.
Ну а перевод отрицательных двоичных в
10-ую систему происходит так:
переворачиваем все цифры на
противоположные, т.е. вместо 0 ставим 1
и наоборот. 11111011b -> 00000100b
переводим полученное в Dec 00000100b = 4
добавляем 1 4 + 1 = 5
ставим знак минус 5 -> -5
Ладно, а теперь всё проверим.....
Запускаем виндовский калькулятор,
ставим галочку Bin, вводим 11111011, ставим
галочку Dec, и ...... видим на экране 251 ??? Что-то
тут не так! В душу вкладывается сомнение:
а не гон ли всё это? Устроим ещё одну
проверку: берём (-5), ставим галочку Bin, и
видим число : 1111111111111111111111111111011 ?
Похоже, но не то! (Кстати попробуйте
перевести его обратно в Dec :)). Вся фишка
заключается в том, что виндовский
калькулятор: не умеет преобразовывать
отрицательные Bin в Dec.
Об числе 1111111111111111111111111111011b : всё дело
втом, что когда мы вычитали из 000b 001b, то
мы не учли одной очень нужной вещи: к
числу можно добавить любое количество
нулей слева!! Т.е. 0 у калькулятора
выглядит так: 00000000000000000000000000000000b :)) Вот и
весь прикол! В (-1) на самом деле бесконечное
множество 1.
А теперь ещё одно маленькое соглашение:
что бы не уподобляться виндовскому
калькулятору и не путать отрицательные
числа с положительными (в Bin разумеется),
мы будем писать положительные числа,
добавляя слева нуль (например: 1 = 01b, 2 = 010b
и т.д.), а отрицательные без него (-1 = 1111b)!
Тем самым мы предотвратим возможную
путаницу!
лежит
ссылка, на работо способность
они к сожалению не проверены. Лучшим же
выходом является попрежнему покупка CD
диска с Паскалем. Напомню, что нам нужен
Borland Pascal 7 (или Turbo Pascal 7). На этом всё.