将底座36直接转换为底座16?

时间:2011-03-09 22:17:01

标签: math

描述将base36编号转换为base16的过程,而不转换为base10作为中介。

2 个答案:

答案 0 :(得分:2)

假设您有一个函数f用于将单个base-36-digit转换为base-16,您可以递归地定义转换函数c,如下所示:对于带有数字的base-36数字a_n ... a_1 n > 1 f(a_1) + 24_16*c(a_n ... a_2)返回a_1(因为36在base-16中表示为“24”);对于只有一位数的基数为36的数字f(a_1),只返回{{1}}。这显然假设你能够在base-16中进行算术运算。

当然,这里真正的问题是在base-16中进行算术 - 这就是为什么你通常通过一些中间基础进行基本转换,你可以进行算术运算;即纸上的基础10和计算机中的基础-2。

请注意,从base-2转换为base-16是一项非常简单的操作。由于16是2的幂,您不需要执行任何算术:您可以逐位执行转换(或者更确切地说,4位乘4位)。

答案 1 :(得分:1)

是的,您可以直接执行此操作,但是您需要在基数16中进行算术运算。诀窍是预先计算基数为16的36,36 ^ 2,36 ^ 3等的值。例如,转换在基数36中表示为237的数字,在基数16中表示为数字。

一种简单的方法是转换为十进制,或任何可以进行算术运算的中间系统。因此我可能会这样做

2 * 36 ^ 2 + 3 * 36 + 7 = 2707(十进制)

然后从十进制转换为十六进制,产生

10 * 16 ^ 2 + 9 * 16 + 3 = A93(十六进制)

直接解决方案很简单。我这样做是为了让你相信没有必要。只需计算(预先)十六进制的36 ^ 2的值。因此,

36 ^ 2 = 510(十六进制)

36 = 24(十六进制)

存储这些预先计算的值。现在以十六进制执行所有计算。

237(基数36)= 2 * 510 + 3 * 24 + 7(十六进制)

在十六进制算术中进行最后一次扩展,你应该得到十六进制的A93。您完全以十六进制完成了所需的计算,而没有求助于中间基础。即使是36的那些权力的预计算也可以用十六进制来完成。