黑马程序员技术交流社区
标题: 求理解算术运算符的++与--问题 [打印本页]
作者: 大漠孤星 时间: 2015-9-15 00:08
标题: 求理解算术运算符的++与--问题
下面程序执行的结果是?
int x =1,y=1;
if(x++==2 & ++y==2)
{
x=7;
}
System.out.println("x="+x+" , y="+y);
A. x=1 y=2
B. x=7 y=1
C. x=7 y=2
D. x=2 y=2
作者: xiaoya0o0o 时间: 2015-9-15 00:08
结果为:x=2,y=2
&并且两边都为ture结果为true,括号内&两边都要进行判断,比如:假如x++==2为假时,还得继续判断右边的++y==2
&&并且两边都为ture结果为ture,当&&的左边为假时就不用判断右边的了,直接为假
比如:假设x++==2为假时就不必判断右边的++y==2了
&&、||和&、|的区别:
1.逻辑&&和||具有短路行为,一旦确定整个表达式的结果,那么将不再执行剩余表达式;
++和--
如果表达式中,只做++或-- 一件事情,那么前++/--和后++/--效果一样的;
但如果表达式中做多件事情:
前++/--:先自增/自减,然后再参与表达式的其它运算;
后++/--:先参与表达式的运算,然后在自增/自减;
比如该题:在 if(x++==2 & ++y==2)中x++=2先是参与了 if 语句的判断再把x赋值为2了
而 ++y==是先将y赋值为2再参与了if 语句的判断
作者: LYfeeling 时间: 2015-9-15 01:00
x++值是1,++y值是2,不执行x=7,之后xy全部自己一次
作者: Adualtbird 时间: 2015-9-15 07:54
++ --都是一元运算符,也就是赋值符号,++在前,表示先自增,再赋值,++在后,表示先赋值再自增
作者: heshiwei 时间: 2015-9-15 10:42
选 D. x=2 y=2
分析:
1. & 是"按位与"的意思,也就是左右两边的操作数装换为二进制,进行与运算后得出的结果。
2. x++是判断后运算,++y 是先运算,后判断。不论++x还是x++, 执行完后,x都加1
也就是说,程序执行到if,先看"x++==2", 发现++在x后面,则先判断x==2?(x是1,自然不成立),那么这个表达式为false。接着遇到&,&是一个运算符,必须知道另一个操作数才能得出结果,所以接着去求"++y==2",
发现++在前,则先将y增加1(此时y=2,表达式成立),"++y==2"的结果true.
那么,综上所述:
false & true ==> 0 & 1 ==> 最终结果为
if ( false ){
}
自然,x=7,不执行,而x,y都增加了1,所以答案为x=2,y=2
作者: 夸克 时间: 2015-9-15 12:02
这个题主要考了两点:两种自增运算的区别和两种(逻辑与)的区别。弄明白这两点无论题目怎么变化,都能应对。
1.自增分++a和a++两种形式:a++是要让a先参与别的运算再自增,而++a要先自增再参与别的运。比如题目里
x++==2,这句要在x本来值(是1的状态)下先判断x==2是否正确,判断完x才会自增1变成2;而如果是++x==2 那么就是x先自增1变成2,再进行x==2的判断。
2.对于&&和&,区别就是&&可以做为短路操作,当&&左边为假时,整条语句结果已经出来了为假,就不会读到&&右边的语句;如果是&,不管左边结果,右边的语句都会读到。
现在你在看题目就很清楚了
作者: youyuxiaoyu 时间: 2015-9-15 18:25
结果是D。因为当++或--在变量后面时先做其他运算在做++或--运算。x=1,x++==2中x先与2比较再+1,所以为false,if语句内的内容就为假。此时x++后等于2。y也++一次=2,。结果为D
作者: 15173139267 时间: 2015-9-15 19:56
我直接用白话给你讲述: x++用法就是先使用然后再自增,所以if条件中x=1;++y用法先自增然后再使用,所以if条件中y=2,&运算符需要判断条件中两者都为真<true>,而且无论左边条件为真假,右边++y都必须执行.所以,x=1不符合条件,所以不进if条件语句中.程序继续往下面执行。当x使用后的下一刻,x=2,而且y=2.
不知道这算不算白话。 越写越不像白话.
做这样的题目,还要理解下 &&符号.
&&也是用来判断条件中两者都为true,才进入if条件语句中。
唯一的区别:只要&&符号左边的条件为假<false>,那么&&符号右边的条件就不用去判断,不用去执行,直接跳出当前if条件.但是左边条件为真<true>时,右边的条件就会进行判断.
例子<用你的程序>:
if(x++=2 && ++y=2){} System.out.println("x:"+x+"y"+y); 结果是: x=2 , y=1
作者: lizhichao 时间: 2015-9-15 20:50
答案是C。 首先XY均为1然后xy都自增1.由于if判断满足。所以X=7Y=2
作者: lizhichao 时间: 2015-9-15 20:51
简单到了。 没有朋友。建议多喝六个核桃补补脑
作者: 洛邑王澈 时间: 2015-9-16 21:04
D. x=2 y=2毕老师视频里举得例子很形象说明问题
作者: shike951128 时间: 2015-9-17 17:51
其实像这样的计算,要注意运算符的优先级。这里需要知道的是,C语言的运算符优先级和java的运算符优先级并不完全一样。
作者: hepann 时间: 2015-9-26 19:03
解释的挺详细
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) |
黑马程序员IT技术论坛 X3.2 |