2014-03-25 40 views
-1

我想將數字從十六進制(基地16)轉換爲三元(基地3),
一個簡單的解決方案是轉換每個數字像這樣hex-> decimal-> binary-> ternary ,
是否有更高效的(=意味着更少的代碼)這個問題?彙編轉換從十六進制到基數3

+0

Hex-> binary非常簡單(除非你的十六進制值是一個字符串,否則它是非運算的,但即使這樣也很簡單)。所以做hex-> binary-> ternary。 –

+0

@PaulR它是一個字符串,你能解釋一下這個過程嗎? – user3453625

+0

每個十六進制字符直接映射到4個二進制位。 0 - > 0000,1-> 0001,...,9 - > 1001,A - > 1010,...,F - > 1111.所以如果你的字符串是137f,那麼這就變成0001 0011 0111 1111.也許這樣做首先在HLL(例如C)中獲取邏輯權限,然後將其轉換爲asm? –

回答

1

取決於「二元」是什麼意思。如果你的意思是--CPU的內部表示,那肯定是要走的路。在任何數字系統中將數字轉換爲字符串涉及整數算術,並且用數字的字符串表示來做這件事很麻煩。

如果你的意思是 - 二進制字符串,一個字符串「0」和「1」字符,你不會錯。

總之,正確的算法將涉及:

  • 轉換數量從十六進制字符串轉換爲整數(如果它是一個編譯時間常數 - 則彙編)
  • 除以三說整一個循環,直到你達到零
  • 存儲各部門的剩餘部分 - 這是你的三元位數
  • 轉換三元位數ASCII
  • 輸出
1

爲了在底m的數轉換成一個數在n進制:

  • 轉換原始基礎m個成整數。這很簡單(主要是「value = value + digit * base」循環)。
  • 將該整數轉換爲基數n。這很簡單(主要是「數字=值%基礎;價值=價值/基地」循環)。

對於某些情況(例如,在十六進制和整數之間轉換),通過使用位移和掩碼代替乘法,除法和模數來優化計算是很容易的。