пятница, 1 мая 2009 г.

А на каком основании?

Хоть руки и чешутся, чтобы поскорее что-нибудь написать на ассемблере и запустить на исполнение, все же без теории не обойтись. Хотя бы в минимальном её объеме. Так что учим мат. часть.

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

Минимальной единицей информации в компьютере является бит (bit), который может находится только в двух состояниях 0 или 1. Так как компьютер может различать только нулевое или единичное состояние бита, то он работает в системе счисления с ОСНОВАНИЕМ 2. То есть в двоичной (binary) системе счисления.

Итак, в двоичной системе счисления используется только две цифры 0 и 1. Сочетанием двоичных цифр можно представить любое значение. Например двоичное число 1001 равно десятичному 9.

Следующее понятие - это байт. Группу из восьми бит называют байтом (byte). Байт может принимать 256 значений от 00000000 (все нули) – ноль, и до 11111111 (все еденицы). Двоичное число 11111111 равно 255 десятичному. Биты в байте нумеруются справа на лево. Нумерация начинается с нуля. Самый правый бит называется младшим значащим разрядом, самый левый – старшим значащим разрядом. Два байта образуют слово (word). Биты в слове, так же как и в байте, пронумерованы слева на право от 0 до 15 (в слове два байта, что равно 16 битам).

Например, возьмем байт содержащий двоичное число 10010110.

Двоичное число 10010110 равно десятичному 150. Теперь посмотрим как легко и быстро переводить числа из двоичной системы в десятичную. Для этого очень удобно использовать систему позиционных весов бита. Вес бита - это 2 (основание системы счисления) возведенная в степень номера бита. То есть, вес бита под номером 0 равен 20 (2 в степени ноль), вес бита под номером 1 равен 21, вес бита под номером 2 равен 22, и т.д. Теперь рассмотрим это же двоичное число с точки зрения позиционных весов.



Теперь просто складываем позиционные веса значащих битов, то есть битов со значением 1. Получаем 128+16+4+2=150.

Потренируемся на другом числе 11011001

128+64+16+8+1=217

Еще раз на заметку. Складываются веса только битов равных 1.

Поскольку двоичный формат представления данных не очень удобен для человеческого восприятия, то был разработан шестнадцатеричный (hexadecimal или hex) формат для представления двоичных данных. То есть система счисления с основанием 16. В этой системе счисления используются 16 символов – 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E, F. Почему именно шестнадцатеричный формат?
Чтобы упростить представление двоичных данных байт поделили пополам и каждые полбайта представляют своим значением, то есть одним символом. Например шестнадцатеричное число FF равно двоичному 11111111 или десятичному 255. Давайте разберемся подробнее как так получилось. Полбайта это четыре двоичных разряда, которые могут принимать значение от 0000 до 1111. Что в десятичной системе счисления соответствует цифрам от 0 до 15. Так как в десятичной системе счисления существует только десять цифр 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, то числа от 10 до 15 решили представить буквами латинского алфавита, соответственно десятичное число 10 представляется латинской буквой A, 11 – B, 12 – C, 13 – D, 14 – E, 15 – F.
Чтобы стало еще понятнее возьмем два предыдущих примера и переведем их в шестнадцатеричную систему счисления. Итак, двоичное число 10010110. Разделим его на две части по четыре бита. Получим, старшие четыре бита 1001 и младшие четыре бита 0110. Теперь представим каждые четыре бита шестнадцатеричным числом: 1001 равно 9 и 0110 равно 6. Итак, шестнадцатеричное число 96, равно десятичному 150 и двоичному 10010110. Чтобы не путать в написании системы счисления, решили при написании шестнадцатеричного числа добавлять к нему букву h(hex), десятичного - букву d(dec) и двоичного - букву b(bin). И так 96h=150d=10010110b.
Возьмем двоичное число 11011001. Разделим его на четыре старших бита 1101 и четыре младших бита 1001. 1101 соответствует десятичному числу 13 и шестнадцатеричному D, 1001 одинаково представляется и в десятичной и шестнадцатеричной системе как 9. Теперь записываем двоичное 11011001 как шестнадцатеричное D9. И так D9h=217d=11011001b.

Обычно, для быстрого перевода в уме между системами счисления, рекомендуют запомнить следующую табличку соответствия:

Dex 0123456789101112131415
Hex 0123456789ABCDEF
Bin 0 1 10 11 100 101 110 111 1000 1001 1010 1011 1100 1101 1110 1111


Но ни кто не запрещает пользоваться калькулятором.

Более подробно (даже с неким дзен) системы счисления разобраны здесь (или можно взять в архиве здесь). Весьма рекомендуется к прочтению.

1 комментарий:

Денис комментирует...

Очень доступно, Буду читать дальше