hex — преобразовать шестнадцатеричное число в десятичное, восьмеричное число в десятичное в PHP без использования функций

Итак, один из моих коллег задал мне этот вопрос по PHP.

Каким будет вывод следующего кода?

<php
echo 0x33, ' birds sit on ', 022, ' trees.';
?>

Приведенный выше скрипт оценивает 51 birds sit on 18 trees. Я знаю, 0x33 представляет шестнадцатеричное число и 022 представляет восьмеричное число

На этот вопрос можно ответить, запустив этот скрипт. Есть ли способ преобразовать шестнадцатеричные числа (основание 16) и восьмеричные числа (основание 8) в десятичные числа (основание 10) без использования таких функций, как hexdec () и octdec ()?


Ответ:

Поскольку этот вопрос был закрыт, я не смог опубликовать ответ на этот вопрос. Вы не можете просто отказаться отвечать, если интервьюер задает тот же вопрос в интервью или убедить интервьюера использовать какую-то функцию PHP для получения ответа.

Предположим, если вы хотите узнать 4 в степени 2, в PHP есть такие функции, как pow(4, 2), Но у разработчика должна быть идея оценить подобные базовые вопросы.

Подобные вопросы бесполезны и бесполезны в реальном мире, но их стоит обсудить, когда речь идет об интервью и экзаменах.

Достаточно сказано. Вот ответ: (спасибо Google)

Преобразование шестнадцатеричного числа в десятичное число:

+-----------------+------------------+
|   Hexadecimal   |     Decimal      |
+------------------------------------+
|       0         |        0         |
|       1         |        1         |
|       2         |        2         |
|       3         |        3         |
|       4         |        4         |
|       5         |        5         |
|       6         |        6         |
|       7         |        7         |
|       8         |        8         |
|       9         |        9         |
|       A         |        10        |
|       B         |        11        |
|       C         |        12        |
|       D         |        13        |
|       E         |        14        |
|       F         |        15        |
+-----------------+------------------+

Пример 1:

Шестнадцатеричное число 0x33, (игнорируйте 0x в начале)

  1. Получите десятичный эквивалент шестнадцатеричного числа из таблицы выше. 3 равно 3, поэтому 33 равно 33.
  2. Поскольку шестнадцатеричное число представляет собой основную цифру 16, умножьте каждую цифру на 16 степеней расположения цифр. (Расположение цифры 0, начиная с 0, справа налево)
  3. 0x33 = (3 * 161) + (3 * 160)
  4. 0x33 = 48 + 3
  5. 0x33 = 51

Пример 2:

Шестнадцатеричное число 0xA, (игнорируйте 0x в начале)

  1. Получите десятичный эквивалент шестнадцатеричного числа из таблицы выше. А равно 10.
  2. Поскольку шестнадцатеричное число представляет собой основную цифру 16, умножьте каждую цифру на 16 степеней расположения цифры.
  3. 0xA = (10 * 160)
  4. 0xA = 10 * 1
  5. 0xA = 10

Преобразование восьмеричного числа в десятичное число:

+-----------------+------------------+
|     Octal       |     Decimal      |
+------------------------------------+
|       0         |        0         |
|       1         |        1         |
|       2         |        2         |
|       3         |        3         |
|       4         |        4         |
|       5         |        5         |
|       6         |        6         |
|       7         |        7         |
|       10        |        8         |
|       11        |        9         |
|       12        |        10        |
|       13        |        11        |
|       14        |        12        |
|       15        |        13        |
|       16        |        14        |
|       17        |        15        |
|       20        |        16        |
+-----------------+------------------+

Пример 1:

Восьмеричное число 022

  1. Получите десятичный эквивалент восьмеричного числа из таблицы выше. 022 равняется 022.
  2. Поскольку восьмеричное — это число из 8 оснований, умножьте каждую цифру на 8 разрядов. (Расположение цифры 0, начиная с 0, справа налево)
  3. 022 = (0 * 82) + (2 * 81) + (2 * 80)
  4. 022 = 0 + 16 + 2
  5. 022 = 18

Пример 2:

Восьмеричное число 010

  1. Получите десятичный эквивалент восьмеричного числа из таблицы выше. 010 равно 010.
  2. Поскольку восьмеричное — это число из 8 оснований, умножьте каждую цифру на 8 разрядов.
  3. 010 = (0 * 82) + (1 * 81) + (0 * 80)
  4. 010 = 0 + 8 + 0
  5. 010 = 8

В нашем случае:

<php
echo 0x33, ' birds sit on ', 022, ' trees.'; // outputs, 51 birds sit on 18 trees.
?>

Надеюсь, что это поможет другим разработчикам PHP, которые ищут ответ на этот вопрос.

-4

Решение

Для номера NяNя-1…N1N0 (то есть 1234 будет иметь п3= 1, n2= 2, п1= 3, н0= 4) в базе Икс Вы можете рассчитать его десятичное значение как:

сумма J = 0 для меня NJИксJ

Таким образом, если 1234 будет в базе 16, у нас будет 4 ⋅ 160 + 3 ⋅ 161 + 2 ⋅ 162 + 1 ⋅ 163 = 4660

Это действительно не что иное, как работа системы счисления. Также обратите внимание, что базовое преобразование от 10 до 10 равно тождественной функции.

Увидеть http://en.wikipedia.org/wiki/Positional_notation#Base_conversion.

2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]