将数字从基数 B1 转换为基数 B2,而不使用任何中间基数
有没有办法在不使用任何中间基数的情况下将数字从基数 B1 转换为基数 B2。
前任:
214 从以 5 为基数到以 16 为基数,而不先将其转换为十进制,然后再将十进制转换为十六进制。
--
谢谢
阿洛克·克尔
有没有办法在不使用任何中间基数的情况下将数字从基数 B1 转换为基数 B2。
前任:
214 从以 5 为基数到以 16 为基数,而不先将其转换为十进制,然后再将十进制转换为十六进制。
--
谢谢
阿洛克·克尔
要将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。
这只是我们使用十进制系统的事实的产物。因此,您希望(在脑海中)考虑十进制中每个数字的“值”。因此,您将所有内容转换回以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