main() {int x,y,z; x=1;y=2;z=3; x=y--<=x||x+y!=z; printf("%d,%d",x,y); } 运行的结果是1和1,为什么不 main() { int X=1,y=2,z=3; x+=y...

main() \uff5bint x,y,z; x=1; y=2; z=3; x=y--<=x||x+y!=

#include "stdio.h" main() { int x,y,z; x=1;y=2;z=3; if(x>y) if(x>z) printf("%d",x); else printf("%d",y); printf("%d\n",z); } \u6b64\u7a0b\u5e8f\u7684\u8f93\u51fa\u7ed3\u679c\uff1a\u8f93\u51fa 3

\u55ef\uff0c\u53ef\u4ee5\u5148\u770b\u770b\u8981\u6c42\u8f93\u51fa\u4ec0\u4e48
printf("%d",(x<y?X++;y++)) }
\u8fd9\u662f\u4e00\u4e2a\u6761\u4ef6\u8868\u8fbe\u5f0f\uff0c\u5224\u65adx<y\u7684\u771f\u5047\uff0c\u771f\u5c31\u53d6x++,\u5047\u5c31\u53d6y++
x=1,y=2,z=3
x+=y+=z \u662f\u81ea\u53f3\u8fd0\u7b97\u7684\uff0cy=y+z=5 \u6b64\u65f6y=5
x+=y x=x+y=1+5=6
\u7136\u540e\u5224\u65adxy \u6240\u4ee5\u6761\u4ef6\u662f\u5047\u503c\uff0c\u53d6y++
\u8fd9\u91cc\u6ce8\u610f\u4e00\u4e0b\uff0c\u8981\u6c42\u8f93\u51fa\u7684\u662fy \u4e0d\u662fy\u7684\u503c
\u6240\u4ee5\u6700\u540e\u7ed3\u679c\u662f5 \u4f46\u5982\u679c\u8981\u6c42\u8f93\u51fay y\u7684\u503c\u5c31\u662f6

这里涉及到运算符的优先级及||的短路特性——当然此处没出现那种情况。
优先级 "<=" > "||" > "=" 故先执行y--<=x( 2<=1)为0 (执行该表达时后y再自减,y变为1) 再执行x+y!=z(1+1!=3) 为1 最后执行总的表达式 即x=0||1(x变为1) 当然输出1和1了

“||”的用法为,当它前面的语句为真时,就不会执行后面的语句,你的语句的输出为:2,1才对,“=”的优先级是大于||的优先级,所以按理说x=y--<=x是一个整体来执行,x=2,y=1。

结果应该是0,1吧!

扩展阅读:int main int argc ... mind+ ... using namespace std ... int a 0x10 ... void main ... i ain't ... main speakers ... man ... int a[3][3] ...

本站交流只代表网友个人观点,与本站立场无关
欢迎反馈与建议,请联系电邮
2024© 车视网