移位运算符就是在二进制的基础上对数字进行平移。按照平移的方向和填充数字的规则分为三种:<<(左移)、>>(带符号右移)和>>>(无符号右移)。
比如左移<<的运算规则:按二进制形式把所有的数字向左移动对应的位数,高位移出(舍弃),低位的空位补零。显然左移是扩大的。
在数字没有溢出的前提下,对于正数和负数,左移一位都相当于乘以2的1次方,左移n位就相当于乘以2的n次方。
又比如 >>运算规则:按二进制形式把所有的数字向右移动对应的位数,低位移出(舍弃),高位的空位补符号位,即正数补零,负数补1。
因此右移一位相当于除2,右移n位相当于除以2的n次方。
我想问的是:既然位运算2<<4比2*16更有效率,为什么java编译器不会编译成2<<4呢?这样不是提高了运行效率了?
|
|