程序集从十六进制转换为基数3

时间:2014-03-25 21:37:13

标签: assembly

我想将数字从十六进制(基数16)转换为三元数(基数3),
一个简单的解决方案是转换每个数字,如hex-> decimal-> binary->三元,
这个问题有效率(=意味着更少的代码)吗?

2 个答案:

答案 0 :(得分:1)

取决于“二元”是什么意思。如果你的意思是 - CPU的内部表示,那肯定是要走的路。在任何数字系统中将数字转换为字符串都涉及整数运算,并且使用数字的字符串表示来执行此操作非常麻烦。

如果你的意思是 - 二进制字符串,一个字符为“0”和“1”的字符串,你就错了。

无论如何,正确的算法将涉及:

  • 将数字从十六进制字符串转换为整数(如果它是编译时常量 - 汇编程序将会)
  • 在循环中将所述整数除以3,直到达到零
  • 存储每个部门的剩余部分 - 这是您的三元数字
  • 将三进制数字转换为ASCII
  • 输出

答案 1 :(得分:1)

将基数为m的数字转换为基数n中的数字:

  • 将原始基数m转换为整数。这很容易(它主要是" value = value + digit * base" loop)。
  • 将该整数转换为base n。这很容易(它主要是" digit = value%base; value = value / base" loop)。

对于某些情况(例如在十六进制和整数之间进行转换),通过使用移位和掩码代替乘法,除法和模数,可以轻松优化计算。