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

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

Решение
Предваряйте число начальным символом, чтобы 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(), чтобы отформатировать их в виде шестнадцатеричных чисел в верхнем регистре длиной как минимум в две цифры. Число с одной цифрой отображается с нулем в начале.
Теги:
printf, print dechex
Добавлено: 17 Июля 2018 07:41:17 Добавил: Андрей Ковальчук Нравится 0
Добавить
Комментарии:
Нету комментариев для вывода...