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

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

Решение
Предваряйте число начальным символом, чтобы 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(), чтобы отформатировать их в виде шестнадцатеричных чисел в верхнем регистре длиной как минимум в две цифры. Число с одной цифрой отображается с нулем в начале.

Оцените статью: (0 голосов)
0 5 0

Статьи из раздела PHP на эту тему:
Взятие логарифмов
Вычисление степеней
Вычисление тригонометрических функций
Генерация случайных чисел в пределах диапазона
Генерация случайных чисел со смещением

Вернуться в раздел: PHP / 2. Числа