所以,我的一位同事向我提出了这个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)
示例2:
十六进制数是0xA,(开头忽略0x)
将八进制数转换为十进制数:
+-----------------+------------------+
| 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
示例2:
八进制数为010
在我们的案例中:
<php
echo 0x33, ' birds sit on ', 022, ' trees.'; // outputs, 51 birds sit on 18 trees.
?>
希望这有助于其他正在寻找这个问题答案的PHP开发人员。
答案 0 :(得分:2)
对于数字 n i n i-1 ... n 1 n 0 (即1234将具有n 3 = 1,n 2 = 2,n 1 = 3,n 0 = 4)在基数 x 中,您可以将其十进制值计算为:
Sum j = 0 to i n j ⋅ x j
因此,如果1234在基数16,我们将有4·16 0 + 3·16 1 +2⋅16 2 +1⋅16 3 = 4660。
这实际上就是数字系统的工作。另请注意,从10到10的基本转换等于标识函数。
见http://en.wikipedia.org/wiki/Positional_notation#Base_conversion。