if(ch>>>8==0)与if(ch<=255)两句的区别?
如题,请高手们谈谈这两句的区别,我自己现在还觉得后一句效率比前句高,理由:后一句直接让变量ch与255做比较,而前一句还额外做了一次位移运算,然后才与0做比较。求各位大大教育!
------解决方案--------------------位运算的效率高的,你写ch<=255,首先要将255转换成二进制,再将ch转换成二进制,然后进行比较的,计算机里面存的都是二进制数据,这点应该知道的。
------解决方案--------------------位运算的效率高
------解决方案--------------------
这帖子里浑水摸鱼误导群众的太多,看不下去了。
这两个效率是完全一样的。
如果是直接写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分钟你就回了,根本不是你看不看得懂的问题