c语言问题之前有个大牛给我说的优先级高于

2021-03-02 08:19:06 字数 5745 阅读 1987

1楼:贤贤易色

看看c语言书后面的优先级吧,这个不重要。编程中要尽量避免,没人记得了那么些。

2楼:匿名用户

(a||(c>d))&&(!p)

3楼:灾究悠

#include int main() printf("n=%d\n", n ); return 0;}

c语言中&&和||的优先级问题

4楼:金鱼

经过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

void main()

运行结果:a=1b=1c=1d=0

5楼:匿名用户

先++x,使得x变为1,此时++x为true(因为不等于0),那么,||是或的意思,只要++x为true了,不管||后面是什么,都不执行。

所以,++y && ++z都不会执行。

这种求值策略为“短路求值”。

6楼:匿名用户

第一步,是自右向左赋值,使得xyz都为0.

第二步,因为&&优先级高所以把第二个式子看成++x||(++y&&++z),然后再看||,由于或运算的结合方向是自左向右,所以先进行左边的++x,使x变为1,此时整个式子为true,就不用进行后面且运算了(计算机也是只要看到||,先算左边,如果左边卫true,那么右边的就不执行了)

c语言中&&和||到底先算哪个?

7楼:忘记旅途了

这里出现三个运算符,++>&&>||,所以先算++,a=++a=2,为真,后面就不算了,

&&前面是0时,&&符号后面的不计算.

||前面不是0时,||号后面的不计算.

所以x=1,a=2,b=1,c=1

8楼:匿名用户

,逗号运算在c语言中是最后的。&& || 是同级,看哪个在前就先算哪个。不过要注意的是&& ||都有不完全运送。

对于&&运送则从左到右进行判断,如果左边为0,则右边不再计算,整个&&运算就是0.||运算也是从左到右,如果有左边为1则右边也不在计算,直接输出1.

++a||++b&&++c这个就可以先判断++a||++b,这里呢,根据上述所说的进行判断,如果1则继续判断&&,如果0则直接输出0,不做最后的++c

9楼:肖国林

其实计算机是这样算的,他会以||为界将表达式分为两部分,他会先算前一部分,如果前一部分为真,他将停止运算,如果为假,他才会算第二部分,你这里第一部分就为真了,第二部分当然也就不会算了。关于计算机对表达式优先级的判断,如果你学了数据结构中栈的结构和应用你就明白了。不过像这种表达式,最好是手动加上括号,而不是靠计算机来自动识别优先级。

像这样的,我的编译器都会警告,我都是会加上括号的,这样就没有警告了。如果不信你可以把&&和它的两个操作数括起来,我相信结果还是这样的。

10楼:米饭亦是菜肴啊

比|++比||和&&的优先级都要高,如果优先级高就先执行的话,那么||和&&执行之前,全部数字(除了x)都已经是2了哟~

毫无疑问的是a||b&&c是等价于a||(b&&c)的,但对于||来说,即使右边有一个括号,但||还是会先计算左边

11楼:匿名用户

这个要由c的预设||处理方式说明,||只要有一个成立就成立,所以++a后知道是非0就成立了,后面不执行。

12楼:冷天释

目测楼主没搞清楚为毛要从左开始算。。。。。。

建议先看&&和||的定义在说。

这个顺序不是优先级的问题,这是结合顺序的问题。。。。。。。。

13楼:匿名用户

它们的优先级是一样的。

14楼:匿名用户

逻辑的“与”和“或”,运算顺序上是同级的,谁在前面就先算哪个。

在c语言中,,&& 和||的优先级哪个高?

15楼:匿名用户

,逗号运算在c语言中是最后的。&& || 是同级,看哪个在前就先算哪个。不过要注意的是&& ||都有不完全运送。

对于&&运送则从左到右进行判断,如果左边为0,则右边不再计算,整个&&运算就是0.||运算也是从左到右,如果有左边为1则右边也不在计算,直接输出1.

++a||++b&&++c这个就可以先判断++a||++b,这里呢,根据上述所说的进行判断,如果1则继续判断&&,如果0则直接输出0,不做最后的++c

16楼:匿名用户

用机器上运行一下就知道了,这个先运算++a,如果是真(非0)就停止,如果是0,则再算++b

接下来,如果++b为0,则停止,如果++b不为0,就再算++c

17楼:没有响应

&& 和||的优先级一样 按从左向右的顺序计算

不过实际使用的时候最好不要靠优先级 ()比优先级可靠的多 用括号可以让程序的可读性提高出错率降低 所以优先级什么的根本不用记

18楼:纳米言

从左自右,因为他们级别一样!

c语言中 if(a||b&&c) ......... 什么意思啊?谢谢。。

19楼:

||1&&表示逻辑与运算;

2||表示逻辑或运算;

3&&运算优先级高于||运算;

4 举例:

(3>2)||(1>2)&&(3>4)

=true||false&&false

=true||false

=true------------1

20楼:

若a=1并且b=2(执行该步操作后,b的值加1为3)。

逻辑运算符是根据表达式的值来返回真值或是假值。其实在c语言中没有所谓的真值和假值,只是认为非0为真值,0为假值。

符号 功能

&& 逻辑与

|| 逻辑或

! 逻辑非

当表达式进行&&运算时,只要有一个为假,总的表达式就为假,只有当所有都为真时,总的式子才为真。当表达式进行||运算时,只要有一个为真,总的值就为真,只有当所有的都为假时,总的式子才为假。逻辑非(!

)运算是把相应的变量数据转换为相应的真/假值。若原先为假,则逻辑非以后为真,若原先为真,则逻辑非以后为假。

还有一点很重要,当一个逻辑表达式的后一部分的取值不会影响整个表达式的值时,后一部分就不会进行运算了。例如:

a=2,b=1;

a||b-1;

因为a=2,为真值,所以不管b-1是不是真值,总的表达式一定为真值,这时后面的表达式就不会再计算了。

这是一类特殊的运算符,自增运算符++和自减运算符--对变量的操作结果是增加1和减少1。例如:

--couter;

couter--;

++amount;

amount++;

看这些例子里,运算符在前面还是在后面对本身的影响都是一样的,都是加1或者减1,但是当把他们作为其他表达式的一部分,两者就有区别了。运算符放在变量前面,那么在运算之前,变量先完成自增或自减运算;如果运算符放在后面,那么自增自减运算是在变量参加表达式的运算后再运算。这样讲可能不太清楚,看下面的例子:

num1=4;

num2=8;

a=++num1;

b=num2++;

a =++num1;这总的来看是一个赋值,把++num1的值赋给a,因为自增运算符在变量的前面,所以num1先自增加1变为5,然后赋值给a,最终a也为5。b=num2++;这是把num2++的值赋给b,因为自增运算符在变量的后面,所以先把num2赋值给b,b应该为8,然后num2自增加1变为 9。

那么如果出现这样的情况我们怎么处理呢?

c=num1+++num2;

到底是c=(num1++)+num2;还是c=num1+(++num2);这要根据编译器来决定,不同的编译器可能有不同的结果。所以我们在以后的编程当中,应该尽量避免出现上面复杂的情况。

21楼:有钱买不起房子

如果表达式a是真 或者 表达式b和表达式c都是真,将执行后面语句。

||是逻辑运算符或 ,&&是逻辑运算符与

在c语言里,0代表假,非0代表真。例如a=3,b=0,c=4,那么a||b&&c 3||0&&4 将是1 是真

22楼:匿名用户

a或b且c

因为“且”的优先级比“或”的高,所以先判断 b且c,然后结果跟a“或”

另外c语言中非零为真,0为假。

“或” "且" "非" 这种逻辑运算具体怎么算不用多说了吧......

23楼:匿名用户

|| 和&&优先级一样,所以按照从左到右的顺序来算

先算a||b 得出结果 与 c进行 &&计算

最后就可以得出结果了

c语言中ll 和&&优先级问题:如何验证&&优先级比||高而避开惰性原则?

24楼:

c语言逻辑判断是从左到右顺序判断的。

--x||--y&&++z。。从反汇编语句中就可以看出来,是先判断--x,然后再判断后面。

虽然&&是优先于||,但他们是同级的,即使先判断后面的,最后还是会需要判断--x,所以,--x在前,直接判断--x,如果为1,就直接不需要判断后面的了,会节省很多时间。

--y&&++z||--x。。就会先判断前面--y&&++z。。说明逻辑判断&&、||是同一级别的,都是从左到右开始判断。。用反汇编来检查顺序就可知道。

怎么体现&&的优先级呢?

如:--x||--y&&++z||++n。。虽然还是从左到右的顺序逻辑判断,而中间的--y&&++z,一定是需要先计算--y&&++z的结果,才能和--x与++n来判断。。

而不是先--x||--y,然后&&++z,这就是&&优先级的体现了。

25楼:匿名用户

运算符按位与 (&)优先级 8,

用于: 表达式 & 表达式

逻辑与 (&&) 优先级 11, 用于: 表达式 && 表达式逻辑或 ( || ) 优先级 12, 用于: 表达式 || 表达式条件运算符 (?:

) 优先级 13, 用于三目运算: 表达式1? 表达式2:

表达式3

优先级 8 高于 11, 高于 12, 高于 13。

26楼:匿名用户

查百科优先级词条即可知道所有运算符优先级

网页链接

实际写**中并不用关注这个问题 一般需要复杂表达式的情况下会尽可能进行拆分,如果实在无法拆分,也应该尽可能全部加上括号,以防在优先级上产生问题

27楼:哈哈呵呵你好

c语言里面&&和||都是逻辑操作,一个是逻辑与一个逻辑或,他们的优先级是一致的。