簡體   English   中英

僅使用按位運算符計算16的指數

[英]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 << iMath.pow(2, i) ,您可以簡單地使用1 << (i * 4) 但是,請注意,這是假定您使用的數據類型不會發生溢出。

int情況下,i的最大值為7;在long情況下,最大值為15。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM