黑马程序员技术交流社区
标题: 逻辑运算有些蒙啊··· [打印本页]
作者: 垂天云 时间: 2013-8-27 15:46
标题: 逻辑运算有些蒙啊···
本帖最后由 杨增坤 于 2013-8-27 22:09 编辑
- 写出输出的结果.
- class Demo
- {
- public static void main(String[] args)
- {
- int x=0,y=1;
- if(++x==y--&x++==1||--y==0)
- System.out.println("x="+x+",y="+y);
- else
- System.out.println("y="+y+",x="+x);
- }
- }
复制代码 谁能帮我详细说明一下if(++x==y--&x++==1||--y==0),这里面的判断顺序,和其中x和y的数值变化····
作者: 范龙波 时间: 2013-8-27 16:26
优先级由高到低:
算术运算符
比较运算符
逻辑运算符:&& ,|| ,!
赋值运算符:= ,+=
其它运算符: n++ n--随便把刚才做测试的两个小练习给你列出来你看一下\
练习 1
int b = 1;
if(3+4*2>10&& flag=true) 打印结果为true
练习 2
int b = 5;
b += b--; // 5+5
System.out.println(b);
b = 5;
b += --b; // 5+4
System.out.println(b);
b = 5;
b += ++b;// 5+6
System.out.println(b);
b = 5;
b += b++; // 5+5
System.out.println(b);
作者: yinbolove576 时间: 2013-8-27 16:26
本帖最后由 yinbolove576 于 2013-8-27 16:28 编辑
- class Test40
- {
- public static void main(String[] args)
- {
- int x=0,y=1;
- if(++x==y-- & x++==1 || --y==0)
- System.out.println("x="+x+",y="+y);//楼主这里的分号打错了
- else
- System.out.println("y="+y+",x="+x);
- }
- }
- /*
- 解析:
- 从式子中可以看出,由于是单与和双或,因此执行顺序是从左往右的,然后
- 1. ++x -->x先自增,然后进行运算,即x=1;而y--则是先进行运算后再进行自减,
- 即1 == 1-- --> true,x值为1,y值为0;
- 2.由于是单与&符号,因此就要两边表达式都要进行判断,所以去执行 x++ ==1,
- x在值为1的前提下,所得1 == 1 -->true ,x再自增为2
- 3.由于是双或||符号,其规则就是只要左边为true右边则不进行运算,因此
- 通过分析得知if语句中的表达式为true,则执行作用域中的语句,即x=2,y=0
- */
复制代码 建议楼主多看看老毕的视频,老毕讲得很透彻的呢~~~
作者: 静以修身 时间: 2013-8-27 16:29
这个很简单嘛,先判断||左边的部分,这时首先判断&左边的部分,++x==y--,即先进行++x,用自加后的x与y比较,然后y--,结果是x=1,y=0,&左边的部分为true,再判断&右边的部分x++==1,结果是x=2,&右边的部分true。这时||左边部分为true,根据短路规则,整个表达式为true,不用判断||右边了,所以最终结果为x=2,y=0
作者: 白磊 时间: 2013-8-27 16:49
请问一下这里的 这个& 运算符和&&运算符有什么区别呢
作者: yinbolove576 时间: 2013-8-27 17:17
&和&&特点:
&:无论boolean表达式左边是true还是false,右边都运算。
&&:当boolean表达式左边为false时,右边不运算,可以发现&&在运算时效率稍高于&。
作者: 老衲玩IT 时间: 2013-8-27 21:08
先把表达示转换得可读性强一点:
int x=0,y=1;
if((++x==y--) & (x++==1) || (--y==0))
楼主你看这是不是不那么头疼了?前辍++是先运算后比较,后辍是先比较后运算。
所以:
(++x==y--)=>true;
(x++==1)=>true;
(--y==0)=>false;
结果是
x=2,y=-1
作者: 王广亚 时间: 2013-8-27 21:25
本帖最后由 王广亚 于 2013-8-27 21:40 编辑
给你一个表
运算符的优先级和结合性
优先级 描述 运算符示例 结合性
1 分隔符 [] () . , ; 右到左
2 对象归类,自增自减运算,逻辑非 instanceof ++ -- 左到右
3 算术乘法运算 * / % 左到右
4 算术加减运算 + - 左到右
5 移位运算 >> << >>> 左到右
6 大小关系运算 < <= >= > 左到右
7 相等关系运算 == != 左到右
8 按位与运算 & 左到右
9 按位与或运算 ^ 左到右
10 按位或 | 左到右
11 逻辑与运算 && 左到右
12 逻辑或运算 || 左到右
13 三目条件运算 ? : 左到右
14 赋值运算 = 右到左
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) |
黑马程序员IT技术论坛 X3.2 |