C语言运算符优先级问题

今天刷题碰到一个运算符优先级的问题,有点困惑。求大佬指点。
题:
设int x=-1;执行表达式++x||++x||++x后,x的值是( )
A.0 B.1 C.2 D.3
答案是B,值为1.

我的解题思路是:先执行第一个++操作,然后x=0, 0或++x,此时x为1, 0或1,结果为1.1或++x,因为只要有一个值为1,则后面不再执行,所以结果为1. 这样能得出答案,但我不知道我的思路对不对,我的思路到底对不对啊?答案没有解题思路,我怕我是误打误撞。
还有一个疑问就是,"++"运算符的的优先级不是比逻辑或"||"要低吗?那不是应该先执行逻辑或吗?即"-1||-1||-1"这样吗?

阅读 3.1k
3 个回答

前缀自增++的优先级高于逻辑操作符||,详情见c语言优先级,你的思路应该是正确的。

++ 优先级高吧,短路求值对的

这个是因为||运算符存在短路的情况,真||,||的左边为真则会直接返回真,短路右边。至于运算符的话,肯定是先计算局部再做||运算,C中0表示false,1表示true,你的想法没问题!
但是你的标签中加入了Java,这个是不行的,Java中不能用0和1表示bool,首先编译就不通过!因为判断时是int||int||int,这样是没法判断的!注意!

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题