c语言中与或的优先级

有一个程序:int a=1,b=1,c=1,d;d=a++||b++&&c++:请问运算后,abcd的值分别是多少? 我觉得与的优先级要大于或,结果应该是1 2 2 1可是在tc上的结果是2 1 1 1

经过n遍的调试,证明:1、||和&&优先级相等,且都是从左往右运算2、在出现||和&&的语句中,并不对a++进行运算,只判断它的初值。当然,这条语句结束后,涉及判断的表达式就会进行相应的运算(如:a++)。3、在&&运算中,如果&&前面的逻辑值为0(如:令a=0; a++&&b++,此时,a还没有进行++运算,仍为0。但是在本语句结束后就自加1),则结束本语句;如果&&前面的逻辑值为1(如:上面的情况令a=1),则继续判断&&后面的值是否为1,如果为1,则继续判断后面的逻辑运算;如果为0,而结束本语句。4、在||运算中,如果||前的逻辑值为1,则结束本语句如果||前的逻辑值为0,则继续判断,若||后的逻辑值为1(如:a||b++, 其中b=1),则结束本语句,否则继续往后判断举个实际的例子:#include<stdio.h>
void main()
{
int a,b,c,d;
a=0;
b=0;
c=1;
d=a++||b++&&c++; /*运算过程是:第一步,判断a 的逻辑值是否为0,可知为0,因此继续往后判断(因为a++这个表达式参与了判断,所以在这条语句结束后,a会变成1);第二步,判断b,可知b的逻辑值0,所以a||b==0,因为之后遇到的是&&运算,而又有&&前的逻辑值为0,直接结束本语句,因此C++并没有参与判断,保持值不变(当然,b有参加判断,结束本语句后,b为1);第三步,由于0&&c++==0,所以d=0*/
printf("a=%d\nb=%d\nc=%d\nd=%d\n",a,b,c,d);
}运行结果:a=1b=1c=1d=0
温馨提示:答案为网友推荐,仅供参考
第1个回答  2013-08-28
这道题的结果为2 1 1 1;它也正好说明了你的观点“与的优先级要大于或”。因为在这个算式中d=a++||b++&&c++:可以这样看d=a++||(b++&&c++)它先计算b++&&c++;显然为1,然后计算a++,因为或运算有这么一个特性:如果前面的为非负后就结束运算,即它只算了a++.你要看最后一次的计算,在算b++&&c++时b++,c++没有进行计算只是进行了判断。
第2个回答  2019-06-06

<<的优先级高于^的优先级。下图中,优先级从上到下依次递减,最上面具有最高的优先级,逗号操作符具有最低的优先级。表达式的结合次序取决于表达式中各种运算符的优先级。优先级高的运算符先结合,优先级低的运算符后结合,同一行中的运算符的优先级相同。

第3个回答  2018-06-26

与>或 ,更细一点是:!    ---> &  ---> ^  ---> | ---> && ---> ||。C语言中的运算优先级和算数优先级一样,只要把的优先级记住就可以了。

C语言是一门通用计算机编程语言,应用广泛。C语言的设计目标是提供一种能以简易的方式编译、处理低级、产生少量的机器码以及不需要任何运行环境支持便能运行的编程语言。尽管C语言提供了许多低级处理的功能,但仍然保持着良好跨平台的特性。

二十世纪八十年代,为了避免各开发厂商用的C语言语法产生差异,由美国国家标准局为C语言制定了一套完整的美国国家标准语法,称为ANSI C,作为C语言最初的标准。  目前2011年12月8日,(ISO)和(IEC)发布的C11标准是C语言的第三个官方标准,也是C语言的最新标准。

C语言继续发展,在1982年,很多有识之士和美国国家标准协会为了使这个语言健康地发展下去,决定成立C标准委员会,建立C语言的标准。委员会由硬件厂商,及其他软件工具生产商,,顾问,学术界人士,C语言作者和员组成。

本回答被网友采纳
第4个回答  2019-06-06
下面是运算符等级,1最高,数字靠后越低,如下:
1.基本表达式
2.后缀表达式
3.单目一元运算
4.强制类型表达式
5.乘除表达式
6.加减表达式
7.移位运算符
8.关系运算符
9.相等运算符
10.位与运算符
11.位异或运算符
12.位或运算符
13.逻辑与运算符
14.逻辑或运算符
15.三元条件运算符
16.赋值运算符
17.逗号运算符
综上,^是位异或运算符,<<是移位运算符,所以<<优先^

相关了解……

你可能感兴趣的内容

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 非常风气网