你能否告訴我們是否有任何有效的方法來計算十六進制數字的總和而不將它們轉換爲base10?我知道如何手動計算總和(實際上與base10相同),但也許有更有效的方法?我將在ABAP中實現該算法,該算法能夠計算十六進制最大4字節長度的總和。十六進制和算法
Q
十六進制和算法
1
A
回答
0
聲明:我不知道ABAP,所以我可能在某些方面完全失效。
求和本質上是增加兩位數的複雜度和位數之間的折衷。在硬件層面,數字以二進制表示,因此每個digit addition都相當容易,但其中有很多。當進行任意大小(或大整數)算術運算時,通常避免在軟件中實現這些位級操作,而是將大量位組合成一個邏輯數位。如果將4位組合在一起,則最終會以十六進制添加。
但是,通過將多個十六進制數字組合成一個數字,您可以形成更大的數字。如果你的機器允許每個數字不超過4個字節,那麼我會得到這個數字的一半,即2個字節或每個數字16位。因此,您將四個十六進制數字組合在一起,然後將它們組合成一個數字(它將以10爲底數表示,但由於您只是用它進行計算,而不是打印它,因此它至少以我知道的語言在內部爲基數2)並執行這些的補充。添加兩個16位數的結果將有17位。其中,最不重要的16位表示結果的一個數字,而最重要的一位是下一位置的進位。將結果數字轉換回十六進制字符串時,請確保每個數字在將它們再次連接之前都將零填充爲4個十六進制數字。一些體系結構有一個進位標誌,所以它們可以將完整的寄存器寬度(在你的情況下是4個字節)作爲一個數字,並且仍然知道是否將進位加到下一個位置。但從高級語言訪問它往往是乏味的,這就是爲什麼我建議你使用寄存器寬度的一半。
請注意,數字分組,填充和連接會使代碼比單獨添加每個數字更復雜。您必須評估性能增益是否確實會增加複雜性。
-1
只需使用X型的變量,如下面的例子:
REPORT Y_HEX_SUM.
PARAMETERS: p_h1(4) type c DEFAULT 'BAFF',
p_h2(4) type c DEFAULT '1234'.
data: g_h1(2) type x, " This works in Unicode systems, otherwise make length 4.
g_h2(2) type x,
g_sum(2) type x.
START-OF-SELECTION.
g_h1 = p_h1.
g_h2 = p_h2.
g_sum = g_h1 + g_h2.
write:/g_h1, '+', g_h2, '=', g_sum.
,無需改變輸入參數,這將輸出:
BAFF + 1234 = CD33
相關問題
- 1. 將十進制轉換爲十六進制和十六進制
- 2. 十六進制和十進制轉換
- 3. C++十六進制計算器乘法
- 4. 如何計算十六進制乘法?
- 5. 十六進制串&十六進制
- 6. 右移算術和十六進制數
- 7. 校驗和的十六進制計算
- 8. 十六進制和十六進制十進制之間的區別
- 9. 十六進制
- 10. 十六進制
- 11. 十六進制
- 12. 大十六進制字符串的算術加法和減法
- 13. 十六進制加法C++
- 14. 十六進制表示法
- 15. 十六進制U2減法
- 16. 十六進制乘法
- 17. lastindexof()和十六進制0x1A
- 18. Cout和十六進制[C++]
- 19. MaskedTextBox和十六進制
- 20. SUBSTRING()和十六進制值
- 21. 十六進制和概率
- 22. 將十六進制轉換爲二進制到十六進制?
- 23. 請與十六進制/十進制數計算
- 24. PHP十六進制和二進制
- 25. 十六進制爲二進制和十進制在matlab中
- 26. 轉換十六進制,十進制,八進制和ASCII?
- 27. C#System.OverflowException二進制到十進制和十六進制轉換
- 28. 將八進制數轉換爲十進制和十六進制
- 29. 十六進制爲十進制
- 30. 使用十進制或十六進制
「的十六進制字符串和」沒有任何意義對我來說。你想做什麼? – vwegert
對不起,只是想計算base16中的數字總和而不轉換爲base10 – user1500581
你是什麼意思下的「有效的方式」?什麼是「無限HEX字符串」?字符串長度不確定? – Suncatcher