A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 大漠孤星 中级黑马   /  2015-9-15 00:08  /  3023 人查看  /  13 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

1黑马币
下面程序执行的结果是?
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

最佳答案

查看完整内容

结果为:x=2,y=2 &并且两边都为ture结果为true,括号内&两边都要进行判断,比如:假如x++==2为假时,还得继续判断右边的++y==2 &&并且两边都为ture结果为ture,当&&的左边为假时就不用判断右边的了,直接为假 比如:假设x++==2为假时就不必判断右边的++y==2了 &&、||和&、|的区别: 1.逻辑&&和||具有短路行为,一旦确定整个表达式的结果,那么将不再执行剩余表达式; ++和-- 如果表达式中,只做++或-- 一件事情,那么前++/-- ...

13 个回复

倒序浏览
结果为: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 语句的判断
回复 使用道具 举报
x++值是1,++y值是2,不执行x=7,之后xy全部自己一次
回复 使用道具 举报
++ --都是一元运算符,也就是赋值符号,++在前,表示先自增,再赋值,++在后,表示先赋值再自增
回复 使用道具 举报
选 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 15:21
回复 使用道具 举报
这个题主要考了两点:两种自增运算的区别和两种(逻辑与)的区别。弄明白这两点无论题目怎么变化,都能应对。
1.自增分++a和a++两种形式:a++是要让a先参与别的运算再自增,而++a要先自增再参与别的运。比如题目里
  x++==2,这句要在x本来值(是1的状态)下先判断x==2是否正确,判断完x才会自增1变成2;而如果是++x==2  那么就是x先自增1变成2,再进行x==2的判断。
2.对于&&和&,区别就是&&可以做为短路操作,当&&左边为假时,整条语句结果已经出来了为假,就不会读到&&右边的语句;如果是&,不管左边结果,右边的语句都会读到。
现在你在看题目就很清楚了
回复 使用道具 举报
结果是D。因为当++或--在变量后面时先做其他运算在做++或--运算。x=1,x++==2中x先与2比较再+1,所以为false,if语句内的内容就为假。此时x++后等于2。y也++一次=2,。结果为D
回复 使用道具 举报
我直接用白话给你讲述:    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
回复 使用道具 举报
答案是C。 首先XY均为1然后xy都自增1.由于if判断满足。所以X=7Y=2
回复 使用道具 举报
lizhichao 发表于 2015-9-15 20:50
答案是C。 首先XY均为1然后xy都自增1.由于if判断满足。所以X=7Y=2

简单到了。 没有朋友。建议多喝六个核桃补补脑
回复 使用道具 举报
D.  x=2  y=2毕老师视频里举得例子很形象说明问题
回复 使用道具 举报
其实像这样的计算,要注意运算符的优先级。这里需要知道的是,C语言的运算符优先级和java的运算符优先级并不完全一样。
回复 使用道具 举报
解释的挺详细
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马