A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© kunsongjack 中级黑马   /  2015-10-15 10:11  /  626 人查看  /  2 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

   移位运算符就是在二进制的基础上对数字进行平移。按照平移的方向和填充数字的规则分为三种:<<(左移)、>>(带符号右移)和>>>(无符号右移)。

     比如左移<<的运算规则:按二进制形式把所有的数字向左移动对应的位数,高位移出(舍弃),低位的空位补零。显然左移是扩大的。
    在数字没有溢出的前提下,对于正数和负数,左移一位都相当于乘以2的1次方,左移n位就相当于乘以2的n次方。

    又比如 >>运算规则:按二进制形式把所有的数字向右移动对应的位数,低位移出(舍弃),高位的空位补符号位,即正数补零,负数补1。
    因此右移一位相当于除2,右移n位相当于除以2的n次方。

   我想问的是:既然位运算2<<4比2*16更有效率,为什么java编译器不会编译成2<<4呢?这样不是提高了运行效率了?

2 个回复

倒序浏览
计算机中数据都是二进制运算,移位也是处理二进制数据,所以效率高
回复 使用道具 举报
难道java编译器就不会自动编译成进行移位运算吗?
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马