繁体   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