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语言里面&&和||都是逻辑操作,一个是逻辑与一个逻辑或,他们的优先级是一致的。