[hackeroid] B1:6 Обозначения.

На самом деле, такую глобальную роль шестнадцатеричная и восьмеричная системы счисления играют исключительно благодаря алгоритмам Ручного Дракона. Внутри машина считает исключительно "по двоичному". Шестнадцатеричная (или восьмеричная, на 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>>>



E-mail: hscool@netclub.ru
Hosted by uCoz