[英]Calculate exponents of 16 using only bitwise operators
如果我正在使用如下所示的循環:
String string = "DF3";
for (int i = string.length() - 1; i >= 0; --i) {
int c = string.charAt(i);
convertedHex += (i << 4);
}
如何不使用Math.pow()
,另一個循環或乘法來計算Math.pow(16, i)
? 具體來說,我該如何僅使用按位運算符呢?
您可以通過觀察16 = 2 4 ,從而16 i = 2 4 * i ,以及2 i = 1<<i
來轉換i
的16次冪。 因此,16 i = 1<<i*4
,可以將其重寫為1<<(i<<2)
以避免乘法。
但是,您無需直接計算16的冪。 您可以在循環中通過重復乘以16來構造數字,即
convertedHex = (convertedHex << 4) + nextHexDigit;
注意: int c = string.charAt(i)
為您提供字符的UNICODE代碼點,而不是相應數字的值。 請改用以下代碼:
int nextHexDigit = Character.digit(string.charAt(i), 16);
鑒於1 << i
與Math.pow(2, i)
,您可以簡單地使用1 << (i * 4)
。 但是,請注意,這是假定您使用的數據類型不會發生溢出。
在int
情況下,i的最大值為7;在long
情況下,最大值為15。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.