c语言题目 为啥结果是 1,2,2 啊 不是说&&优先于||么

发布于2022-10-25 20:07:05

#include void main() { int i=1,j=1,k=2; if(j++||k++&&i++) printf("%d,%d,%d\n",i,j,k); }

5个回答
admin
网友回答2022-10-25
j++||k++&&i++
相当于
j++||(k++&&i++)

所以先算j++,一看比0大,后面的k++&&i++就不管了
所以k和i还保持原状
admin
网友回答2022-10-25
&&(11)的优先级比||(12)高
不过这两个运算符是左结合的 运算时的顺序也是从左到右
A||B&&C||D 等价于 A||((B&&C)||D) 先算表达式A 再 B C D
同理
j++||k++&&i++ 等价 j++||(k++&&i++) 但是还是会先算j++再算后面
admin
网友回答2022-10-25
&&的优先级比||高,
j++||k++&&i++相当于j++||(k++&&i++)

这里的问题是:&&的优先级高不代表会先运行 || 的右边(k++&&i++),而是会把右边的当作一个整体值来看待
从整个的判断顺序来说 是先大后小的 会先判断最外面的 ||
|| 的顺序还是从左到右的 ,所以只走了j++就停下来了。
admin
网友回答2022-10-25
优先是指结合性, 不是只运算顺序.
假设按运算顺序, ++ 比|| && 都高
admin
网友回答2022-10-25
《c primer plus中文版第五版》101页 5.3.6 不要太聪明 一节有详细说明 具体意思 与 sun_siliang 回答的一样

回到
顶部