java中整数的整数次方_数值的整数次方java

偶数 A(n) = A(n/2) * A(n/2)

奇数A(n) = A((n-1)/2) * A((n-1)/2)

指数为0或小于1 怎么办?

底数为0 时返回什么?

* 2 ^ 4 = 16 4D = 100B

* res = power(2,2) -> power(2,1) -> 2

* |

* res&1=1

* 2*2

* 4*4

*/

public class 数值的整数次方 {

public static double power(double num, int exp) {

if (exp < 0)//解决负数问题

return 1 / power(num, -exp);

if (exp == 0)

return 1;

if (exp == 1)

return num;

double res = power(num, exp >> 1);

res = res * res;

if ((exp & 1) == 1)

res = res * num;

return res;

}

public static void main(String[] args) {

System.out.println(power(2, 4));

System.out.println(power(2, -2));

}

}

用右移运算替代了除以2

用位与运算符替代了求余运算符(%)来判断奇偶

当需要对2的次幂进行求余时,可以是使用&运算符来代替

a/b的除数b必必须为2的n次方

使用位操作(&运算)代替求余操作

%运算:a%b

由于我们知道位运算比较高效,在某些情况下,当b为2的n次方时,有如下替换公式:

a % b = a & (b-1)(b=2n)

即:a % 2n = a & (2n-1)

例如:14%8,取余数,相当于取出低位,而余数最大为7,14二进制为1110,8的二进制1000,8-1 = 7的二进制为0111,由于现在低位全为1,让其跟14做&运算,正好取出的是其低位上的余数。1110&0111=110即6=14%8;(此公式只适用b=2n,是因为可以保证b始终只有最高位为1,其他二进制位全部为0,减去1,之后,可以把高位1消除,其他位都为1,而与1做&运算,会保留原来的数。)

参考

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值