Разработчику. Сборник рецептов PHP
Задавайте вопросы

Вычисления с не десятичными числами

Вернуться назад

Задача

Необходимо выполнить математические операции не над десятичными числами, а над восьмеричными или шестнадцатеричными. Например, определить корректные цвета веб-сайта в шестнадцатеричном формате.

Решение

Предваряйте число начальным символом, чтобы PHP смог узнать, что это не десятичное число. Следующие значения равны:

0144       // основание 8
100       // основание 10
0x64       // основание 16

Ниже показан отсчет от 1 до 15 в шестнадцатеричной нотации:

for ($i = 0x1; $i < 0x10; $i++) { print "$i\n"; }

Обсуждение

Даже если в цикле for используются числа в шестнадцатеричном формате, по умолчанию все числа печатаются в десятичном формате. Другими словами, код из предыдущего раздела «Решение» не печатает «..., 8, 9, a, b, ...». Напечатать число в шестнадцатеричном формате можно при помощи одного из методов, перечисленных в рецепте(Преобразование из одной системы счисления в другую)
Например:

for ($i = 0x1; $i < 0x10; $i++) { print dechex($i) . "\n"; }

Большинство вычислений проще выполнять в десятичной системе. Однако иногда логичнее переключиться на систему с другим основанием, например при использовании 216 веб-корректных цветов. Каждый код веб-цвета представляется в виде RRGGBB, где RR – это красный цвет, GG – зеленый цвет, а BB – голубой. Каждый цвет на самом деле представляет собой двузначное шестнадцатеричное число от 0 до FF.

Особыми веб-цвета делает то, что каждый из кодов RR, GG и BB должен быть одним из шести чисел: 00, 33, 66, 99, CC и FF (в десятичном формате: 0, 51, 102, 153, 204, 255). Поэтому 003366 – это веб-корректный цвет, а 112233 – нет. Веб-корректные цвета отображаются на 256-цветном мониторе без сглаживания переходов.

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

for ($rr = 0; $rr <= 0xFF; $rr += 0x33)
       for ($gg = 0; $gg <= 0xFF; $gg += 0x33)
           for ($bb = 0; $bb <= 0xFF; $bb += 0x33)
              printf("%02X%02X%02X\n", $rr, $gg, $bb);

В данном цикле вычисляются все веб-корректные цвета. Пошаговое приращение записывается в шестнадцатеричной системе, поскольку это усиливает шестнадцатеричную связь между числами. Печатайте их с помощью функции printf(), чтобы отформатировать их в виде шестнадцатеричных чисел в верхнем регистре длиной как минимум в две цифры. Число с одной цифрой отображается с нулем в начале.

Вернуться назад

Рейтинг@Mail.ru

Яндекс.Метрика

Индекс цитирования

Рейтинг Сайтов ДОСКИ.РУ