java中幂指数值的运算

来源:互联网 发布:王国维人生三境界知乎 编辑:程序博客网 时间:2024/04/30 13:37

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

        这个方法可以满足我们大多数幂指数的计算,但是每次访问的值和传入的值都是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;    }

0 0