一个面试题:用最有效率的方法计算2*8的结果?
有人回答是用移位的方法效率最高,即将2移位三次,本人不懂其原理,
请问结果是怎么得来的,原理是什么?

解决方案 »

  1.   

    2 = (10)2  2进制表示法
    2 << 3 表示 将2按2进制表示法向左移位3次10 -> 100 -> 1000 -> 10000 = 1 * 2^4 = 16 = 2 * 8一般的,向左移位1次表示将该数乘以2,移位3次就是乘以2乘以2乘以2 = 乘以8在计算机科学中,移位比起普通的逻辑运算效率更高,因为在硬件上容易实现(请谷歌度娘)事实上,有些编译器在处理运算时会使用移位对运算进行优化比如  遇到 *2 *4 *8 *2的幂时 会用左移位, /2 /4 /2的幂 用向右移位又比如 乘以 31 会变成 乘以(32 -1) e.g. 31 * a -> 32 * a - a -> a << 5 - a