Маленькие хитрости

"Главная часть дисциплинирующей выучки — это ее сокрытая часть, предназначенная не освобож­дать, но ограничивать." Ф. Херберт. "Еретики Дюны".

Хорошо, если в вашем распоряжении окажутся шестнадцатиричный и двоич­ный калькуляторы. Но в некоторых ситуациях и они недоступны. Конечно, это преувеличение и если продолжать экстраполировать, то можно сказать, что иногда вообще калькулятора под рукой может не оказаться.

Но хакер должен рассчитывать на самое худшее и привыкать полагаться только на самого себя. Тем более что ничего сложного в этих операциях нет. Как можно перевести произвольное число в двоичное? Для этого нужно поделить его на 2 и записать остаток в младший разряд. И так до тех пор, пока делить станет нечего. Или, другими словами, нам нужно вспомнить признак делимости на два. Все мы его проходили в школе. Если последняя цифра числа делится на два, то и все число делится на два. Хорошо, а как разделить, если нет калькулятора н ] даже счетов? f

Разумеется, в столбик. При этом можно легко оперировать и шестнадцатирич- j ными числами (при вычислении в столбик это не составляет существенного j затруднения). 1

Однако этот способ несколько утомителен. Куда проще запомнить (или вычислить в уме) ряд квадратов:

1 2 4 8 16 32 64 128

Ясно, что любое число от нуля до 255 представляет собой их сумму. Причеи1 каждая степень может встречаться только один раз. Покажем это на примере. Допустим, нам необходимо узнать двоичное представление числа 99. Начинаем с конца. Число нечетное, значит, в сумме фигурирует единица, т.е. младший бит равен единице. Отнимаем от 99 один и получим 98. Если отнять еще и двойку, то получим 96, а 96 === 32 +64 как легко можно видеть. Итого в двоичном виде1 это — 1100011. Конечно, это потребует определенных навыков устного счета, но все же достаточно просто, чтобы не обращаться каждый раз к калькулятору.

Аналогично можно любое число из двоичного перевести в десятичное. Например:

1001b == 1+2*0+4*0+8*1 == 1+8 === 9

Все вышесказанное не в меньшей мере применимо и к шестнадцатиричньй числам:

0х1 0х2 0х4 0х8 0х10 0х20 0х40 0х80

Причем все математические операции с такими круглыми числами делать^ уме на порядок проще, за что я и люблю шестнадцатиричную систему счисления. Разумеется, описанные приемы ни для кого не должны быть новостью, и все они входят в школьный курс информатики и вычислительной техники. Удивитель­но, но, покинув стены школы, многие о них забывают! Отчасти это оправдано, но все же бывают в жизни ситуации, когда человек остается наедине с машиной, без прикладного ПО и все эти операции волей-неволей приходится выполнять в уме.

Или более правдоподобная ситуация: вы в поезде (трамвае, метро, автобусе) изучаете распечатку программы, а калькулятор, как назло, забыли взять. Как ни редко, но все же и такое случается!