算法(一):如何高效的算出2*8的值,位移算法原理解释,为什么8左移1位,4左移2位,2左移3位,1左移4位的结果为16

位移算法,如何高效的算出2*8的值,为什么8<<1,4<<2,2<<3,1<<4的结果为16,位移算法原理解释:

一个很重要的原因埋在前头:当初笔者刚出来面试遇到这道题也曾是一脸懵逼,后来查了很多相关资料也都不全面,大多数是给答案不给解释。笔者结合了工作中的经验作出了如下解释及思路:

结果:

8<<1(8转二进制向左移动一位)

思路:

1、最终要得出结果2*8=16
2、将16转成二进制结果:0000 0000 0001 0000
3、第2步前面的0根据16位数字填充也可以填充到32、64位
4、16转二进制步骤:

16/2=8......0
 8/2=4......0
 4/2=2......0
 2/2=1......0
 1/2=0......1
取出余数从下往上排列出二进制结果:10000

5、选择最高效的二进制数字:01000
6、即01000向左移动1位的二进制就是10000与16的二进制刚好对应(移出16位范围的数字直接抛弃,移空的数字补充二进制0)
7、再将01000转换成十进制(从右往左算):

0*2^0=0*1=0
0*2^1=0*2=0
0*2^2=0*2*2=0
1*2^3=1*2*2*2=8
十进制结果:0+0+0+8=8

8、答案/结论:8<<1,4<<2,2<<3,1<<4
9、进一步猜想1<<4与8<<1哪个效率更高?与什么有关?感兴趣的朋友,欢迎在评论区作出回复~

猜你喜欢

转载自blog.csdn.net/seesun2012/article/details/79774652