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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 陈坚 中级黑马   /  2012-4-13 18:57  /  2880 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

                                int a=4;
                int j=a<<1;//左移一位就相当于乘以2,
                int k=a>>1;//又移一位相当于除以2
                        int j1=a*2;
                        int k1=a/2;
                System.out.println("j="+j+","+"k="+k);//j得到的结果是8,k的结果是2
                System.out.println("j1="+j1+","+"k1="+k1);//j1得到的结果是8,k1的结果是2
移位的左移和右移能够达到乘和除的功能,同*和/符号能够达到同等的结果,试问一下移位运算的运算速度是不是比乘除的速度快和效率高呢?

评分

参与人数 1技术分 +1 收起 理由
贠(yun)靖 + 1

查看全部评分

4 个回复

正序浏览
移位运算比乘除速度快、效率高,那是因为计算机CPU直接支持移位运算,但是正如楼上兄弟所说的,有它的局限性
回复 使用道具 举报
可以这样认为,楼上几位说的都没有错

但是位运算有它的局限性,他只能进行2的倍数的运算
回复 使用道具 举报
可以这样认为,因为位移运算符直接操作2进制的数,计算机底层都是用2进制存储的,所以操作快点

评分

参与人数 1技术分 +1 收起 理由
贠(yun)靖 + 1

查看全部评分

回复 使用道具 举报
这个可以这样认为,移位操作的效率是比普通乘除更高。
因为移位操作进行的是底层的位操作,只需简单的移位就能完成,而乘除方法则需要进行一些运算。
如果反出汇编来,则能看到肯定是移位更加快。因为汇编中也是有位操作的,一步完成。而乘除方法则需要进行一些运算。

评分

参与人数 1技术分 +1 收起 理由
贠(yun)靖 + 1

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马