if(ch>>>8==0)与if(ch<=255)两句的区别? 如题,请高手们谈谈这两句的区别,我自己现在还觉得后一句效率比前句高,理由:后一句直接让变量ch与255做比较,而前一句还额外做了一次位移运算,然后才与0做比较。求各位大大教育!javajdk位移运算效率 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 ch是char类型的话 也要转换 位运算的效率高的,你写ch<=255,首先要将255转换成二进制,再将ch转换成二进制,然后进行比较的,计算机里面存的都是二进制数据,这点应该知道的。 +1有一个经典的面试题,不知道楼主看过没有:用最有效率的方法算出2乘以8等于几?答案是:2<<3。和这个一样,计算机是二进制的,不管多大的数都要先转为二进制才能计算 这帖子里浑水摸鱼误导群众的太多,看不下去了。这两个效率是完全一样的。如果是直接写x86汇编,分析一下是这样ch >>> 8 #一条mov (load ch),一条unsigned shift指令,2个CPU cycle== 0 #一条jz (jump if zero),1个CPU cycle总数3个ch <= 255 #一条mov (load ch),一条cmp(比较ch和255),一条jg (jump if greater)同样3个CPU cycle看Java ByteCode,是这样if ((ch >>> 8) == 0) {} ILOAD 2 # 加载变量 ch BIPUSH 8 # 加载常量 8 IUSHR # 对上述两个操作符进行bit shift IFNE L2 # 比较如果不是0就跳转if (ch <= 255) {} ILOAD 2 # 加载ch SIPUSH 255 #加载255 IF_ICMPGT L3 #比较如果不是大于等于关系就跳转JVM能做的最好的情况就是和我之前汇编语言分析一样(255和8必须优化为指令中的直接常量)。如果不然,第一个比第二个多了一条语句,反而可能会更差。不过,根据实验,两者性能完全一样。所以我不知道什么叫“转化为二进制”,跟<<运算的效率有什么关系,还有你是怎么被“一语惊醒梦中人”的。 这帖子里浑水摸鱼误导群众的太多,看不下去了。这两个效率是完全一样的。如果是直接写x86汇编,分析一下是这样ch >>> 8 #一条mov (load ch),一条unsigned shift指令,2个CPU cycle== 0 #一条jz (jump if zero),1个CPU cycle总数3个ch <= 255 #一条mov (load ch),一条cmp(比较ch和255),一条jg (jump if greater)同样3个CPU cycle看Java ByteCode,是这样if ((ch >>> 8) == 0) {} ILOAD 2 # 加载变量 ch BIPUSH 8 # 加载常量 8 IUSHR # 对上述两个操作符进行bit shift IFNE L2 # 比较如果不是0就跳转if (ch <= 255) {} ILOAD 2 # 加载ch SIPUSH 255 #加载255 IF_ICMPGT L3 #比较如果不是大于等于关系就跳转JVM能做的最好的情况就是和我之前汇编语言分析一样(255和8必须优化为指令中的直接常量)。如果不然,第一个比第二个多了一条语句,反而可能会更差。不过,根据实验,两者性能完全一样。所以我不知道什么叫“转化为二进制”,跟<<运算的效率有什么关系,还有你是怎么被“一语惊醒梦中人”的。哥们儿,你写了这么多,估计也没几个可以看懂的嘛,能用通俗点的语言说一下为啥不?????? 简单地说,就是执行这两条语句所用的CPU时间完全相同,所以不存在快慢问题。PS:我发了帖子不到3分钟你就回了,根本不是你看不看得懂的问题 简单地说,就是执行这两条语句所用的CPU时间完全相同,所以不存在快慢问题。PS:我发了帖子不到3分钟你就回了,根本不是你看不看得懂的问题呵呵,说实话,汇编我一点也看不懂计算机原理方面我是小白,呵呵 求java程序员解释这个简单的继承和覆盖的问题 贵求以下两题的代码,急! 非常感谢! 怎样用反射机制获得基本数据类型的类型 (高分求)谁有北大青鸟11月20日的JAVA考试试题啊!!!!!!!!!!!!有的请给出来呀,谢谢呀 导入了指定的不可见类型 自己编写JAVA代码实现打印功能 myeclipse快捷键的使用的问题 求助下各位 关于日期 tomcat怎么使用? SCO OpenServer下的Java问题 将不定期开放“人人都说Swing丑,唯我独爱它—Swing高仿QQ” 源码 javase差不多学完了,求推荐项目案例的书籍或者资源分享
有一个经典的面试题,不知道楼主看过没有:用最有效率的方法算出2乘以8等于几?
答案是:2<<3。
和这个一样,计算机是二进制的,不管多大的数都要先转为二进制才能计算
ch >>> 8 #一条mov (load ch),一条unsigned shift指令,2个CPU cycle
== 0 #一条jz (jump if zero),1个CPU cycle
总数3个ch <= 255 #一条mov (load ch),一条cmp(比较ch和255),一条jg (jump if greater)
同样3个CPU cycle看Java ByteCode,是这样
if ((ch >>> 8) == 0) {
}
ILOAD 2 # 加载变量 ch
BIPUSH 8 # 加载常量 8
IUSHR # 对上述两个操作符进行bit shift
IFNE L2 # 比较如果不是0就跳转if (ch <= 255) {
}
ILOAD 2 # 加载ch
SIPUSH 255 #加载255
IF_ICMPGT L3 #比较如果不是大于等于关系就跳转JVM能做的最好的情况就是和我之前汇编语言分析一样(255和8必须优化为指令中的直接常量)。如果不然,第一个比第二个多了一条语句,反而可能会更差。不过,根据实验,两者性能完全一样。所以我不知道什么叫“转化为二进制”,跟<<运算的效率有什么关系,还有你是怎么被“一语惊醒梦中人”的。
ch >>> 8 #一条mov (load ch),一条unsigned shift指令,2个CPU cycle
== 0 #一条jz (jump if zero),1个CPU cycle
总数3个ch <= 255 #一条mov (load ch),一条cmp(比较ch和255),一条jg (jump if greater)
同样3个CPU cycle看Java ByteCode,是这样
if ((ch >>> 8) == 0) {
}
ILOAD 2 # 加载变量 ch
BIPUSH 8 # 加载常量 8
IUSHR # 对上述两个操作符进行bit shift
IFNE L2 # 比较如果不是0就跳转if (ch <= 255) {
}
ILOAD 2 # 加载ch
SIPUSH 255 #加载255
IF_ICMPGT L3 #比较如果不是大于等于关系就跳转JVM能做的最好的情况就是和我之前汇编语言分析一样(255和8必须优化为指令中的直接常量)。如果不然,第一个比第二个多了一条语句,反而可能会更差。不过,根据实验,两者性能完全一样。所以我不知道什么叫“转化为二进制”,跟<<运算的效率有什么关系,还有你是怎么被“一语惊醒梦中人”的。
哥们儿,你写了这么多,估计也没几个可以看懂的嘛,能用通俗点的语言说一下为啥不??????
PS:我发了帖子不到3分钟你就回了,根本不是你看不看得懂的问题
PS:我发了帖子不到3分钟你就回了,根本不是你看不看得懂的问题呵呵,说实话,汇编我一点也看不懂计算机原理方面我是小白,呵呵