java中幂指数值的运算代码解析

 更新时间:2017年12月11日 16:49:14   作者:寻找现实扭曲力场  
这篇文章主要介绍了java中幂指数值的运算代码解析,具有一定借鉴价值,需要的朋友可以参考下。

说到幂指数的运算我们就会用到Math.pow(doublea,doubleb),返回的结果是a的b次方。

在Java中,当我们计算2的n次方时,可以直接用Math.pow来计算。非常方便。

但是,已知一个幂的结果为M和幂的底数a,现在要求幂的指数n。Math中提供的有log(double)方法,但是只能传入一个参数,即M。那么问题来了,如何简单、方便、快捷的达到我们的要求呢?答案如下:

n=Math.log(M)/Math.log(a);

这个方法可以满足我们大多数幂指数的计算,但是每次访问的值和传入的值都是double,自己不想去转的话怎么办,我们有一种新的方案。

方案前提:幂指数的底数是2的倍数。

这里我们就用到了移位运算(移位运算是基于二进制来的,所以方案前提就是这个依据),如我们求2的3次方,我们可以用2<<(3-1)来计算出结果。

4的2次方,我们先要把4转化为2的2次方,再来2<<(4-1)来计算出结果。

下面这个方法实现的效果是我们传入一个2的倍数相加的两个数,比如12(是4+8),我们把它自动计算出[4,8]

再比如18,我们把它计算出[2,16]

再比如22,我们把它计算出[2,4,16]

/** 
   * 以2的次方开始的转换成整型数组,字符串数组 
   * @param sum 传入派系的值,可以是一个派系的值,也可以是多个派系相加的值 
   *      2^1 + 2^2 这种 
   * 突然忘记移位操作也是一种指数幂的运算 
   * @return 
   */
private static int[] toUgroupArray(int sum){
	if(sum < 0){
		System.out.println("you have an eroor code");
	} else if(sum == 0) {
		System.out.println("you have no choise code");
	} else{
		String binaryCode = Integer.toBinaryString(sum);
		System.out.println("binary code:"+binaryCode);
		int index = binaryCode.length() -1;
		String str = "";
		for (int i=0;i<binaryCode.length();i++){
			if(binaryCode.charAt(i) == '1'){
				str = str + index +",";
			}
			index --;
		}
		str = str.substring(0, str.length()-1);
		System.out.println(str);
		String[] strArray = str.split(",");
		int[] result = new int[strArray.length];
		//也可以返回一个字符数组 
		//String[] result2 = new String[strArray.length]; 
		for (int i=0;i<strArray.length;i++){
			//result[i] = (int)Math.pow(2, Double.parseDouble(strArray[i])); 
			result[i] = 2 << (Integer.parseint(strArray[i])-1);
		}
		return result;
	}
	return null;
}

总结

以上就是本文关于java中幂指数值的运算代码解析的全部内容,希望对大家有所帮助。感兴趣的朋友可以继续参阅本站其他相关专题,如有不足之处,欢迎留言指出。感谢朋友们对本站的支持!

相关文章

  • 详解Mybatis的缓存

    详解Mybatis的缓存

    这篇文章主要介绍了Mybatis缓存的相关资料,帮助大家更好的理解和使用Mybatis框架,感兴趣的朋友可以了解下
    2021-01-01
  • SSH框架网上商城项目第28战之使用Ajax技术局部更新商品数量和总价

    SSH框架网上商城项目第28战之使用Ajax技术局部更新商品数量和总价

    这篇文章主要为大家详细介绍了SSH框架网上商城项目第28战之使用Ajax技术局部更新商品数量和总价,感兴趣的小伙伴们可以参考一下
    2016-06-06
  • 关于@Value注解失效的原因分析

    关于@Value注解失效的原因分析

    这篇文章主要介绍了关于@Value注解失效的原因分析,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-09-09
  • java设计模式之适配器模式

    java设计模式之适配器模式

    这篇文章主要为大家详细介绍了java设计模式之适配器模式,介绍了什么是适配器模式,适配器模式的种类,感兴趣的小伙伴们可以参考一下
    2016-08-08
  • Java中BigDecimal的基本运算(详解)

    Java中BigDecimal的基本运算(详解)

    下面小编就为大家带来一篇Java中BigDecimal的基本运算(详解)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-10-10
  • springboot整合shiro的过程详解

    springboot整合shiro的过程详解

    Shiro 是一个强大的简单易用的 Java 安全框架,主要用来更便捷的 认证,授权,加密,会话管理,这篇文章给大家详细介绍Shiro 工作原理及架构图,通过实例图文相结合给大家介绍的非常详细,需要的朋友参考下吧
    2021-10-10
  • Java堆&优先级队列示例讲解(上)

    Java堆&优先级队列示例讲解(上)

    这篇文章主要通过示例详细为大家介绍Java中的堆以及优先级队列,文中的示例代码讲解详细,对我们了解java有一定帮助,需要的可以参考一下
    2022-03-03
  • springboot乱码问题排查思路解析

    springboot乱码问题排查思路解析

    这篇文章主要为大家介绍了springboot乱码问题排查思路解析,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-06-06
  • springMVC的生命周期详解

    springMVC的生命周期详解

    本篇文章主要介绍了springMVC的生命周期详解,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-03-03
  • 原生Java操作mysql数据库过程解析

    原生Java操作mysql数据库过程解析

    这篇文章主要介绍了原生Java操作mysql数据库过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-11-11

最新评论