/*
第一题: 编程计算3乘8等于几,什么方法效率更高?
需求:编程计算3乘8等于几,什么方法效率更高
思路:一般方法是定义变量,然后通过乘法运算符* 进行运算。
如果进行位运算的话,效率比较高。
发现8是2的3次方,因此可以用位运算来计算3*8
但是位运算乘数必须是2的N次幂才能进行,因此要判断乘数是否为2的N次幂
一个数是否为2的N次幂也可以用<<位运算来判断,
用 x & (x-1)== 0,用右移运算符>>右移1位来获取幂的次数
步骤:
1,定义乘法运算函数
2,判断是否能用效率更高的位运算进行乘法运算
3,如果可以进行位运算则获取幂的次数
4,否则用 * 运算符进行运算
5,调用乘法运算函数
*/
class Test1
{
public static void main(String[] args)
{
//调用乘法方法
chengfa(3,8);
}
//定义乘法方法
public static void chengfa(int a,int b)
{
//判断乘数是否是2的n次幂
if(b > 0 && (b & (b-1)) == 0)
{
//定义参数x用来存储幂的次数
int x = 0;
int y = b;
//while循环右移1位的方式计算幂的次数
while(y-1>0)
{
y>>=1;
x++;
}
//左移运算并打印结果
System.out.println(a+"*"+b+"="+(a<<x));
}
else
//乘法运算并打印结果
System.out.println(a+"*"+b+"="+(a*b));
}
}
大家帮忙参考参考。。。 |
|