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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 张俊飞 中级黑马   /  2013-12-20 15:36  /  1357 人查看  /  9 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

若a、b为int型变量且分别赋值为2、4,则表达式!(++a!=b--)的值是true。
我觉得应该是false,为什么是true

评分

参与人数 1技术分 +1 收起 理由
乔兵 + 1

查看全部评分

9 个回复

倒序浏览
3!=4  It's true      a是先自加,b是做完运算,再自减。
回复 使用道具 举报
我认为是这样的,
int a=2;
int b =4;
++a!=b--
是a先自增,a=3与b比较,但这时b还是4,所以为true。
比较完之后,b再自减。

评分

参与人数 1技术分 +1 收起 理由
乔兵 + 1

查看全部评分

回复 使用道具 举报
先看运算符的优先级,++和--运算比!=的优先级高
++a的结果是3
b--的结果是先赋值,再自减
所以就是先比较完3!=4的结果为true后,b的值才自减为3
希望说的明白

评分

参与人数 1技术分 +1 收起 理由
乔兵 + 1

查看全部评分

回复 使用道具 举报
表达式!(++a!=b--)的值是false呀,表达式(++a!=b--)的才是true,你编个程序试试,我估计你是哪里弄错了才会导致错误的答案
回复 使用道具 举报 1 0
本帖最后由 黄伟财 于 2013-12-20 20:12 编辑

打个比喻吧,++a是先吃完饭再出去干活,换句话说,把2赋值给a,那么a会先自增一次等于3,然后这时和b比较,由于是b--,b会先干完活再去比较,所以这时是3在和4在比,结果肯定是true,比较完了之后,b再--等于3
回复 使用道具 举报
弘一 中级黑马 2013-12-20 20:38:41
7#
我们来看看前++与后++的区别。
1.前++,则是++a。是先++后操作(赋值,判断等等的功能)
int c = ++a;
第一步是进行++,则a = a + 1;
第二步是进行操作,则int c = a;
2.后++,则是a++。是后++先操作(赋值,判断等等的功能)
int c = ++a;
第一步是进行操作,则int c = a;
第二步是进行++,则a = a + 1;
!(++a!=b--)的步骤
1.a = a+1;//a=3 b=4
2.因为++ --的优先级要比!=高所以b = b -1;//a=3 b=3
3.(a!=b)//false
3.!(false)//true

评分

参与人数 1技术分 +1 收起 理由
乔兵 + 1

查看全部评分

回复 使用道具 举报
楼主,你搞错了      !(++a!=b--)       的结果是false
回复 使用道具 举报
恩恩 中级黑马 2013-12-22 13:38:17
9#
答案肯定false,为什么如下解释:
首先你在做++a!=b--这个比较的时候,a已经加1了,这时候的a=3, 这个++在前面的意思就是在把a和b作比较之前就加1,所以这里的a=3, 但是这个时候的b并没有变,还b=4, 因为这个--在后面的意思是这一次运行完以后才会执行这个减一的动作。所以++a!=b-- 表达式是真的,前面又加了一个非,那么这个表达式就是假的了。所以答案就是假的。
如果还不明白可以debug,在eclipse里面使用debug模式,看看每个变量的变化情况。

评分

参与人数 1技术分 +1 收起 理由
乔兵 + 1

查看全部评分

回复 使用道具 举报
这个是运算符优先级的问题。
算数运算符的优先级高于逻辑运算符。
++和--运算符是算数运算符,!=是逻辑运算符。
所以该操作是等算数运算结束之后再进行逻辑运算,结果当然是true了。
不过以后使用++和--要注意结合方向。注意a++和++a的区别。

评分

参与人数 1技术分 +1 收起 理由
乔兵 + 1

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马