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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 胡建伟 于 2013-8-29 20:37 编辑

下面是我自己的做法,希望各位高手能给出更有效率的方法,请附带注释哦
package com.itheima;
/**
* 2.编程计算3乘8等于几,什么方法效率更高?
* @author xiaowei
*
*/
public class Test2 {

public static void main(String args[]){
  //采用移位运算输出结果
  //System.out.println((2<<3)+(2<<2));本来想把8拆分成2的整数,不过反而麻烦
  System.out.println(3<<3);// 左移相当于乘. 左移一位相当于乘2(2^1);左移两位相当于乘4(2^2);左移三位相当于乘8(2^3)
}

}

评分

参与人数 1技术分 +1 收起 理由
田磊阳 + 1

查看全部评分

40 个回复

正序浏览
public class Test2
{

        public static void main(String[] args)
        {       
                FunctionOne();
                FunctionTwo();
                for(int i=1;i<10;i++)//照理来说应该是位移运算是最快的,可是在我机器运行,多次运行!然后比较2者运算时间不确定
                {
                        FunctionOne();
                        FunctionTwo();
                }                       
        }

        private static void  FunctionOne()//方法1:直接相乘 看处理器时间
        {
                int result=0;//保存结果               
                long pre=System.currentTimeMillis();//当前时间
                long post=0;//保存运行结束后时间
                for(int i=0;i<100000000;i++)//运行1亿次,看运行时间
                         result = 3*8;
                post=System.currentTimeMillis();
                System.out.println("方法1 运行时间为:"+(post-pre)+" ms"+"  3乘8的结果为:"+result);
        }
       
        private static void FunctionTwo()//通过位移 左移3位,相当于成8,理论上速度更快!
        {
                int result=0;//保存结果               
                long pre=System.currentTimeMillis();//当前时间
                long post=0;//保存运行结束后时间
                for(int i=0;i<100000000;i++)//运行1亿次,看运行时间
                         result = 3<<3;
                post=System.currentTimeMillis();
                System.out.println("方法2 运行时间为:"+(post-pre)+" ms"+"  3乘8的结果为:"+result);
        }
               
}
回复 使用道具 举报
理论上应该是位移速度快,但是,我做实验是时候,发现直接相乘有时候比位移快,求解释
回复 使用道具 举报
这个真的是学习了,还以为是加法最快呢
回复 使用道具 举报
汤化峰 发表于 2013-11-25 19:18
**** 作者被禁止或删除 内容自动屏蔽 ****

8是2<<3,电脑中数据是二进制的,乘以8就是被乘数向左移动3位,你问的3,是题目中的乘数3.也就是3*8,那么应该是,3<<3。
回复 使用道具 举报
谢谢分享
回复 使用道具 举报
你说的只是算3*8,直final 24不是更快吗{:2_30:}
回复 使用道具 举报
咦,学习了!
回复 使用道具 举报
        public static void main(String[] args) {
                //计算机底层都是2进制,直接操作2进制是最快的.位运算是直接对二进制进行运算.
                //3*8=3*(2*2*2) 往左移一位就要乘以一个2的倍数 ,这样就是左移了三位
        int x = 3 << 3;
        System.out.println("3*8的值:"+x);
        }
回复 使用道具 举报 1 0
非常感谢!
回复 使用道具 举报
                 赞,
回复 使用道具 举报
左移<<<3位就好了
回复 使用道具 举报
我也需要学习学习
回复 使用道具 举报
胡建伟 发表于 2014-7-20 21:24
你这回复岂不是更无聊啊,在你看过老毕讲位移运算视频前,遇到这问题你有头绪吗?不要告诉我你是去百度哈,再 ...

前辈你是通过先学免费的基础班再转入培训的吗?
我基础不太好~不知道能不能通过面试
回复 使用道具 举报

你这回复岂不是更无聊啊,在你看过老毕讲位移运算视频前,遇到这问题你有头绪吗?不要告诉我你是去百度哈,再说哥这帖子都发了多久了,你不去论坛里去看新帖子,新提问积攒积分,在这做无聊评论,浪费时间,有能力尽快通过面试来黑马啊,哥在这里都快毕业了;P
回复 使用道具 举报
胡建伟 发表于 2014-6-13 21:17
你这回复岂不是更无聊啊,在你看过老毕讲位移运算视频前,遇到这问题你有头绪吗?不要告诉我你是去百度哈,加 ...

  不好意思我说错话了
回复 使用道具 举报
Stevenj 发表于 2014-6-18 15:05
兄台,谢谢你的建议,thank you!

恩恩, 是啊,坚持到最后的都会有收获
回复 使用道具 举报
胡建伟 发表于 2014-6-18 00:46
如果心中还是有研究生情节的话,那你还是坚持复习备考,为自己的梦想再试一把,如果想早点就业,不像在考研上 ...

兄台,谢谢你的建议,thank you!
回复 使用道具 举报
Stevenj 发表于 2014-6-16 20:49
您好,想向您请教下,我先在马上毕业,计算机专业的,考过一次研,但是考的是英语专业的(由于复习的晚,起 ...

如果心中还是有研究生情节的话,那你还是坚持复习备考,为自己的梦想再试一把,如果想早点就业,不像在考研上学了,而自己技术一般那就可以来黑马或者传智播客,这里还是很靠谱的,如果网上流程没过,可以先上传智播客或者黑马也开了免费基础班,可以更顺利考上黑马,我也是这么过来的.当然条条大路通罗马,如果你自己可以找到份不错的工作,或者有关系的话,没必要再培训,我同学没上黑马,北京干一年半java,现在也照样10k,如果前面说的都没有那,强烈推荐你来黑马学习,出去后工资也很可观,28期那些大神,平均工资都快10k了,9936啊
回复 使用道具 举报
您好,想向您请教下,我先在马上毕业,计算机专业的,考过一次研,但是考的是英语专业的(由于复习的晚,起初考本专业,但由于报名时数学复习的不理想,就报了英语专业),现在面临就业,计算机技术一般,就业的话想先花钱去参加“javaEE+物联云计算”的培训,很喜欢这个方向,但一哥们考上了东北大学计算机,所以也犹豫要不要二战,继续考下东北大学,非常有信心能考上! 希望给些建议,若能回复,万分感谢。(本人男生)。今年政治75,英语74。如果二战的话,需要在C语言、数据结构、数学、上下很大功夫。本科 三流二本,在黑龙江齐齐哈尔市的 齐齐哈尔大学。。。。。其实就是就业(分两种,一种先培训,一种直接到公司满满学习)和考研选择上的利与弊,要是你处在我的情景时,会怎么办!感谢你的回复
回复 使用道具 举报
123下一页
您需要登录后才可以回帖 登录 | 加入黑马