大佬教程收集整理的这篇文章主要介绍了输出以下C程序,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
#include<stdio.h> int main(){ int x,y,z; x=y=z=1; z = ++x || ++y && ++z; printf("x=%d y=%d z=%d\n",x,z); return 0; }
表达式x的计算结果为2,编译器知道2 ||无论什么都有,任何东西总是评估为1(“真实”).因此,它不会进行任何评估,y和z的值也不会改变.
如果你尝试
x=-1; y=z=1;
您将看到y和z将递增,因为编译器必须评估OR的右侧以确定表达式的结果.
编辑:aSAErl先在评论中回答了你的后续问题,所以我会稍微扩展他的正确答案.
运算符优先级确定组成表达式的部分如何绑定在一起.因为AND的优先级高于OR,所以编译器知道你写了
++x || (++y && ++z)
代替
(++x || ++y) && ++z
这使得它的任务是在x和y&&之间进行OR. ž.此时,通常可以自由选择是否“首选”首先评估一个或另一个表达式 – 按照标准 – 并且通常不能依赖于特定的顺序.此顺序与运算符优先级无关.
但是,特别针对||和&&标准要求评估将始终从左到右进行,以便短路可以工作,如果评估lhs的结果告诉,开发人员可以依赖于未评估的rhs表达式.
以上是大佬教程为你收集整理的输出以下C程序全部内容,希望文章能够帮你解决输出以下C程序所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。