移位运算

位移运算

用最有效率的方法算出2乘以8等於几? (这是一道面试题)

2 << 3,

因为将一个数左移 n 位,就相当于乘以了2的n 次方,那么,一个数乘以8只要将其左移3位

即可,而位运算cpu 直接支持的,效率最高,所以,2乘以8等於几的最效率的方法是2 << 3。

/**
 * 
 * <<	(左移)
 * 将一个运算符对象的各二进制位全部左移诺干位(左边的二进制位丢弃,右边补0
 * 操作数每左移一位,相当于该数乘以2 
 * 将一个数左移 n 位,就相当于乘以了2的n 次方
 */
System.out.println((3<<4) == (3 * (Math.pow(2, 4))));//true
System.out.println((3<<4));// 3 * 16 == 48
System.out.println((10<<4) == (10 * (Math.pow(2, 4))));//true
System.out.println((10<<4));//10 * 16 == 160

/**
 * >>	(右移) 
 * 将一个数的各二进制位全部右移诺干位,正数左补0,负数左补1,右边丢弃。
 * 操作数每右移一位,相当于该数除以2 
 */
System.out.println((14>>2) == Math.floor((14 / (Math.pow(2, 2)))));//true
System.out.println(14 / (Math.pow(2, 2)));// 3.5
System.out.println((14>>2));// 3 -->向下取整

System.out.println((14>>4) == Math.floor((14 / (Math.pow(2, 4)))));//true
System.out.println(14 / (Math.pow(2,4)));// 0.875
System.out.println((14>>4));// 0 -->向下取整