用最有效的方式算出2*8等于几

hyhssm 2018-10-23 02:57:14
这是我看到一个面试题,下边给的答案是:
2 << 3,


为什么不是 8<<1
...全文
405 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
hyhssm 2018-10-25
  • 打赏
  • 举报
回复

自己测试了一下,每执行100亿次获取执行时间,循环10次
测试代码:


//2<<3

public void test1(){
for (int j = 0; j < 10; j++) {
long startTime = System.currentTimeMillis();

for (long i = 0; i < 10000000000L; i++) {
int k = 2;
int c = k<<3;
}
long sendTime = System.currentTimeMillis();
System.out.println("时间:"+(sendTime-startTime));
}

}

测试结果: 单位:毫秒
时间:4238
时间:5065
时间:5055
时间:5044
时间:5071
时间:5175
时间:5064
时间:5046
时间:5059
时间:5054
平均时间:5070


//8<<1
public void test2(){
for (int j = 0; j < 10; j++) {
long startTime = System.currentTimeMillis();

for (long i = 0; i < 10000000000L; i++) {
int k = 8;
int c = k<<1;
}
long sendTime = System.currentTimeMillis();
System.out.println("时间:"+(sendTime-startTime));

}

}

测试结果: 单位:毫秒
时间:4215
时间:5110
时间:5060
时间:5061
时间:5110
时间:5099
时间:5054
时间:5060
时间:5060
时间:5061

平均时间:5075
从测试结果来看差别不大,在测试过程中还运行这其他程序,很可能对结果有影响,这只是其中一组测试结果,之后换了2<<4 16<<1测试,结果基本也是持平
傅九爷 2018-10-23
  • 打赏
  • 举报
回复
因为是2乘上一个数,符合题意的才是正解
G.Jagger 2018-10-23
  • 打赏
  • 举报
回复
了解一下移位运算原理,<< 1(左移一位是相对于二进制来说的,如果是十进制数转为二进制后左一位后在转为十进制数)

62,628

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧