黑马程序员技术交流社区

标题: 同一代码,在上面不能编译,在下面不但能变异还能运行 [打印本页]

作者: ffuujian    时间: 2015-4-2 23:00
标题: 同一代码,在上面不能编译,在下面不但能变异还能运行
public static void toHex(int num)//将10进制转换16进制的方法
{
      for (int x=0; x<8; x++)//int类型是4个8位,每次右移4位,只能右移8次,定义遍历8次
      {
             int temp = num&15;// 取出最后4位
             if (num&15>9)//如果大于9转化为字母
                     System.out.println((char)((num&15)-10+'A'));
             else
                     System.out.println(num&15);//不大于9直接打印
             num = num>>>4;
      }
}
打印出来,为什么只有 if (num&15>9),这里报错,改成if (temp>9),就好了,而后面的 num&15 不报错呢

QQ截图20150402225545.jpg (23.97 KB, 下载次数: 24)

报错

报错

作者: ffuujian    时间: 2015-4-2 23:04
看这个图,上面那个是带备注的

QQ截图20150402230236.jpg (22.75 KB, 下载次数: 24)

QQ截图20150402230236.jpg

作者: z47057554    时间: 2015-4-2 23:50
运算符优先级的问题吧,你换成 if((num&15)>9) 应该可以的
作者: qq250144825    时间: 2015-4-3 00:04
运算符优先级问题,'>'要高于‘&’两级,把“num&15”改为“(num&15)”可解决,课本运算符章节有提到“为了避免优先级别问题报错,编码时可把需优先处理的运算加上()”。
作者: ffuujian    时间: 2015-4-3 00:13
z47057554 发表于 2015-4-2 23:50
运算符优先级的问题吧,你换成 if((num&15)>9) 应该可以的

噢噢,明白了,谢谢
作者: ffuujian    时间: 2015-4-3 00:15
qq250144825 发表于 2015-4-3 00:04
运算符优先级问题,'>'要高于‘&’两级,把“num&15”改为“(num&15)”可解决,课本运算符章节有提到“为 ...

讲的太到位了,谢谢了
作者: 快乐ABC    时间: 2015-4-3 00:29
关系运算符>的优先级大于位运算符&的优先级,一个数与一个布尔值位运算,就报错了




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2