На самом деле, такую глобальную роль шестнадцатеричная и восьмеричная системы счисления играют исключительно благодаря алгоритмам Ручного Дракона. Внутри машина считает исключительно "по двоичному". Шестнадцатеричная (или восьмеричная, на DEC'овских машинах) система счисления позволяет вместо длинных цепочек ноликов и единиц писать короткие числа, делает хэкерскую жизнь более разнообразной. Эти системы -- промежуточное звено между машиной и человеком, между двоичной и десятичной системами счисления.
Роль систем счисления огромная. К примеру, права доступа к файлу в системе UNIX изменяются из shell'а командой chmod. И эта команда требует задания аргумента (прав доступа) в восьмеричной системе счисления! Так команда
chmod 666 /etc/passwd
Открывает доступ на чтение и запись всем пользователям к файлу паролей в системе UNIX. Вы видите теперь, что даже самые тупые системные администраторы должны разбираться в восьмеричной системе счисления. Так чего же говорить о хэкерах!
В различных языках программирования числа в этих системах обозначаются по разному. Вот сводная таблица для основных языков:
+-------------+-------+--------+--------+----------------+ | | C/C++ | Pascal | BASIC | Assembler | +-------------+-------+--------+--------+--------+-------+ | DECimal | 12 | 12 | 12 | 12,12d | 12T | | HEXadecimal | 0xC | $C | &hC | 0Ch | | | OCTal | 014 | нет | &o14 | 14o | 14Q | | BINary | нет | нет | &b1100 | 1100b | 1100Y | +-------------+-------+--------+--------+--------+-------+
В B1:1 мы отметили, что нули в начале числа не влияют на его значение. Создатели языка C решили по другому. Поскольку никто в здравом уме не начинает числа с нуля -- кому охота набивать лишнии нулики, ноль в начале они используют для обозначения восьмеричного числа.
При всех способах записи регистр букв неважен. Даже строгий на регистры C позволяет начинать шестнадцатеричные числа как с 0x, так и с 0X. Кстати, гуру Киевского Центра нашей Школы, Сергей Головко (2:463/140), сообщил, что в ранних версиях компиляторов C различных фирм шестнадцатеричные числа надо было начинать с 0x0, иначе они глюкали.
При программировании на ассемблере если шестнадцатеричное число начинается с буквы, перед ним обязательно должен ставится ноль. Иначе ассемблер подумает, что вы имели в виду переменную Ch, а не число C_16. Ряд людей с низким уровнем интеллекта, не способным вместить это правило, ставят ноль впереди всех шестнадцатеричных чисел. Хуже всего, когда такие люди начинают писать учебники...
[IBM PC teaching on]
Суффиксы T, Q и Y введены в ассемблер MASM сравнительно недавно. Дело в том, что с помощью директивы .RADIX ассемблер позволяет менять систему счисления, действующую по умолчанию. Раньше, когда систему счисления изменяли на шестнадцатеричную, числа вроде 12D, которые с первого взгляда являются обычными шестнадцатеричными, интерпретировались как 12_10. Это порождало сеть мелких незаметных психоделических ошибок, мешавших чайникам использовать .RADIX 16.
[IBM PC teaching off]
Мы будем использовать все способы записи чисел, используя ассемблерный способ как основной. Вы должны хорошо владеть всеми способами, потому что в технических дискуссиях по сетям они все активно используются.
>>>
Для перевода чисел в BASIC'е из десятичной системы счисления в шестнадцатеричную, двоичную и восьмеричную используются функции HEX$, BIN$ и OCT$.
Для перевода чисел из этих систем в десятичную надо воспользоваться хитростью.
?VAL("&hFC")
<<<
<<<B1:6 EOF>>>