黑马程序员技术交流社区

标题: 运算符问题 [打印本页]

作者: 张俊飞    时间: 2013-12-20 15:36
标题: 运算符问题
若a、b为int型变量且分别赋值为2、4,则表达式!(++a!=b--)的值是true。
我觉得应该是false,为什么是true
作者: 谢文斌    时间: 2013-12-20 15:42
3!=4  It's true      a是先自加,b是做完运算,再自减。
作者: 伍艳雄    时间: 2013-12-20 15:43
我认为是这样的,
int a=2;
int b =4;
++a!=b--
是a先自增,a=3与b比较,但这时b还是4,所以为true。
比较完之后,b再自减。
作者: 大雄9293    时间: 2013-12-20 15:57
先看运算符的优先级,++和--运算比!=的优先级高
++a的结果是3
b--的结果是先赋值,再自减
所以就是先比较完3!=4的结果为true后,b的值才自减为3
希望说的明白
作者: 张利星    时间: 2013-12-20 16:01
表达式!(++a!=b--)的值是false呀,表达式(++a!=b--)的才是true,你编个程序试试,我估计你是哪里弄错了才会导致错误的答案
作者: 黄伟财    时间: 2013-12-20 20:10
本帖最后由 黄伟财 于 2013-12-20 20:12 编辑

打个比喻吧,++a是先吃完饭再出去干活,换句话说,把2赋值给a,那么a会先自增一次等于3,然后这时和b比较,由于是b--,b会先干完活再去比较,所以这时是3在和4在比,结果肯定是true,比较完了之后,b再--等于3
作者: 弘一    时间: 2013-12-20 20:38
我们来看看前++与后++的区别。
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
作者: woshihuoye    时间: 2013-12-20 21:00
楼主,你搞错了      !(++a!=b--)       的结果是false
作者: 恩恩    时间: 2013-12-22 13:38
答案肯定false,为什么如下解释:
首先你在做++a!=b--这个比较的时候,a已经加1了,这时候的a=3, 这个++在前面的意思就是在把a和b作比较之前就加1,所以这里的a=3, 但是这个时候的b并没有变,还b=4, 因为这个--在后面的意思是这一次运行完以后才会执行这个减一的动作。所以++a!=b-- 表达式是真的,前面又加了一个非,那么这个表达式就是假的了。所以答案就是假的。
如果还不明白可以debug,在eclipse里面使用debug模式,看看每个变量的变化情况。
作者: smileven    时间: 2013-12-22 18:49
这个是运算符优先级的问题。
算数运算符的优先级高于逻辑运算符。
++和--运算符是算数运算符,!=是逻辑运算符。
所以该操作是等算数运算结束之后再进行逻辑运算,结果当然是true了。
不过以后使用++和--要注意结合方向。注意a++和++a的区别。





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