我不小心写错了
虽然||比&&优先级低,但是n=...这条语句的作用是1和后面的结果相或,1代表真,所以||后面的值不需要再计算了,因此ijk取原来的值,故得此结果!
追问这是咋回事?
可是按理说先执行&&再执行||,而且我刚才试了去掉n =了,还是一样的
这是咋回事?
追答这是C的特性,在进行或运算时,只要前面的结果为真,后面的运算就是多余的了,没必要再做了
真 or 真 =真
真 or 假 =真
后面的值不影响结果,再做后面的操作纯粹浪费时间!这是C的巧妙之处
那我将1改成0,它后面进行运算了唉,
n=后面的1
追答非常正确!把1改为0,就进行后面计算
0表示假,它要进行后面计算,才知真假。
如果前面已经为真,就没有必要多此一举
追问可是我想问的是 &&运算符不是优先于||运算符么?那按理说我我改成1最先运行的也不应该是||运算符啊,而是先运算&&俩边的俩个自增啊,所以那个地方不管是不是0或1,中间俩个自增都会执行啊
可是我改成0为什么不执行,如果不执行,那么他们的优先级就一样了啊
我查了资料&&的优先级比||优先级高,应该先执行&&俩边才对啊
我知道啊,可是&&的优先级高于||,按理说先执行&&啊
追答有规定运算方向的按照运算方向优先
追问那请问下,什么情况下&&运算符才比||运算符先执行
追答int a ,b ,c;结果为 0
在这个情况下,先计算b>0&&b<1 =0,在计算 a||0=0
|| 左值=1时,=1;左值=0时,计算右值,再合并
&&左值=0时,=0;左值=1时,计算右值,再合并
追问那把a的值改为1似乎后面的也还是不执行啊
追答是的,这叫短路运算,
本回答被提问者和网友采纳我将n =后面的1改成了0它就改变了i,j,k,的值
追答变成了1462对吧
这是逻辑运算中的短路现象,
当&&前面是0时,&&后面的不计算。因为无论后面是1还是0他的结果都是0
当||前面不是0是,||后面的不计算。因为无论后面是1还是0他的结果都是1
虽然&&比||的优先级高,但是C保证逻辑表达式是从左至右求值的!!!!!
so当n=1时由于短路现象,直接跳过||后的式子,所以就不存在ijk的自增
当n=0时,需要看后面的式子是否为1,所以需要运算||后面的式子,ijk自增,输出结果就为1462。
追问不是,不进行计算,直接原值输出
追答我吧n||后面改成0的运行结果是1462……
追问我说错了。。1是不计算,0计算了,抱歉,😄
c语言逻辑运算符 我不明白&&和||到底是怎么运算的
优先级:&&的优先级比||高,所以在写在一起时,先计算&& 再计算||。相同符号时,自左向右计算。4 短路原则:对于&&,如果左操作数a为0,那么结果必然为0,右操作数b将不参与计算。对于||,如果左操作数a非0,那么结果必然为1,右操作数b将不参与计算。
计算机C语言中逻辑运算符“与”“或”“非”优先级是怎样的?
非的优先级最高(它是一个单目操作符)与的优先级次之或的优先级,最低单目操作符的优先级最高。1)&&:当且仅当两个运算量的值都为"真"时,运算结果为"真",否则为"假"。2) || :当且仅当两个运算量的值都为"假"时,运算结果为"假",否则为"真"。3) ! :当运算量的值为"真"...
在C语言中,,&& 和||的优先级哪个高?
在C语言中,理解逻辑运算符的优先级对于编写正确的程序至关重要。人们经常困惑于"&&" 和 "||" 这两个逻辑运算符的优先级问题。但事实是,这两个运算符属于同一级别,也就是说,它们的优先级相等。因此,在表达式中,它们的执行顺序取决于它们在表达式中的位置,即“谁在前算谁”。理解这两个运算符...
c语言中&&和>的优先级哪个更高?
第六级:关系运算符【 > = 】第七级:等于运算符【==】、不等于运算符【!=】第八级:按位与运算符【&】第九级:按位异或运算符【^】第十级:按位或运算符【|】第十一级:逻辑与运算符【&&】第十二级:逻辑或运算符【||】第十三级:条件运算符【?:】第十四级:赋值运算符【= += -= ...
C语言中ll 和&&优先级问题:如何验证&&优先级比||高而避开惰性原则?
虽然&&是优先于||,但他们是同级的,即使先判断后面的,最后还是会需要判断--x,所以,--x在前,直接判断--x,如果为1,就直接不需要判断后面的了,会节省很多时间。--y&&++z||--x。。就会先判断前面--y&&++z。。说明逻辑判断&&、||是同一级别的,都是从左到右开始判断。。用反汇编来检查...
C语言中&&(与)和|(或)的优先级到底哪个高,还是一样高啊?
不一样啊!”=“在c语言中是一个赋值符号,它的优先级在c语言中是最低的!!!而“==”是关系运算符,它的优先级是高于“=”的!
C语言中 &&和‖谁优先级更高
优先级【高到低】:第一级:圆括号【()】、下标运算符【[]】、分量运算符的指向结构体成员运算符【->】、结构体成员运算符【.】第二级:逻辑非运算符【!】、按位取反运算符【~】、自增自减运算符【++ --】、负号运算符【-】、类型转换运算符【(类型)】、指针运算符和取地址运算符【*和&...
C语言中运算符=和&=的优先级为什么相同?后者是什么意思?
很多人都把&和&&搞混,&&是逻辑运算符,叫做与,它计算的结果只有0和1两个;&叫做按位与,优先级比&&高,它的计算方法是把两个数都转化成二进制,然后对应的每一位分别进行与运算,得到的数是结果。例如说 int a=2; int b=3; a&=b;2的二进制是10 3的二进制是11 按位与结果是10,...
为何C语言中||优先于&&运算符?
整个表达式的值才为假(0)。它们在C语言中是严格执行运算符优先级规则的,即&&比||优先级高。此外这两个运算符的优先级高于赋值运算符,但低于算术运算符。与加减乘除运算符相比,逻辑运算符的优先级较低。在表达式中,如果有多种运算符,需要按照优先级和结合性进行计算,以保证表达式的正确性。
C语言逻辑运算符&&和||同时存在时候,不应该先算&&吗?
++的优先级最高,所以先算++x,结果x=1,后面的运算符是||,这就意味着不管||后面的运算结果是什么,最后结果都是1,所以尽管&&的优先级高,但也不用计算了,所以最终结果x=1,y=0,z=0 注意一点:优先级与求值顺序无关!