将数字从基数 B1 转换为基数 B2,而不使用任何中间基数

2022-09-03 00:42:58

有没有办法在不使用任何中间基数的情况下将数字从基数 B1 转换为基数 B2。

前任:

214 从以 5 为基数到以 16 为基数,而不先将其转换为十进制,然后再将十进制转换为十六进制。

--

谢谢

阿洛克·克尔


答案 1

要将214base5转换为没有中间基数的16,您“只需要”知道如何直接在base 5中计算。

首先,你需要一个以16为基数的表格(在将以10为基数转换为以16为基数时,你需要一个类似的表格,只是这个表格更容易保存在你的脑海中!此表易于创建 - 只需从 0 开始,然后递增每个以 5 为基数的行,直到达到以 16 为基数。f

base 16 | base 5
--------+--------
      0 |  0
      1 |  1
      2 |  2
      3 |  3
      4 |  4
      5 | 10
      6 | 11
      7 | 12
      8 | 13
      9 | 14
      a | 20
      b | 21
      c | 22
      d | 23
      e | 24
      f | 30

现在你只需要重复除以16(即31base5)。我们现在回想起我们的小学时代,并使用长除法(如果这看起来很难,那是因为没有人让你学习以5为基数的时间表!

第 1 步:

   ______
31 ) 214

第 2 步:

       3 
   ______
31 ) 214 -
     143  

第 3 步:

       3 
   _____
31 ) 214 -
     143  
    ----
      21

因此,214base5 除以 31base5 的结果为 3base5 的余数 21base5

这意味着 base16 中的最低有效数字是 21base5,您可以在表中找到它是 bbase16。除法的结果是 3基数 5 - 如果这大于 30基数 5,那么我们将再次除以 3 为基数 - 但事实并非如此,因此这意味着最高有效数字是(再次使用表)3基数16

所以答案是214base5 = 3bbase16


答案 2

这只是我们使用十进制系统的事实的产物。因此,您希望(在脑海中)考虑十进制中每个数字的“值”。因此,您将所有内容转换回以10为基数。如果您知道如何在其他基数中进行除法和乘法,那么在不使用以10为基数作为中间值的情况下来回转换将很容易。然而,大多数人通常不会做以5为基数的除法/乘法,并且会将所有内容转换回以10为基数。

不过,算法是相同的。除以新基础的最大功率,然后除以较小的功率,你将获得新的基础。

例如,0x3B以 5 为基数。

(数学以16为底)

3B / 5^2 = 2 余数 9

9 / 5 = 1 余数 4

所以0x3B = 214 基数 5

如果你知道如何做非基数10除法,那就很简单了。但是,绝对没有理由学习这一点,因此作为中间步骤转换回以10为基数要容易得多。

但是,有一种简单的方法可以在二进制和十六进制之间进行转换。只需将数字分成4个二进制/ 1个十六进制数字的组,然后逐个数字转换。

1111 0000 1100 0001 
   F    0    9    1