为您找到"
a=b=c=1;++a||++b&&++c;执行后输出a,b,c各是多少
"相关结果约100,000,000个
C语言中是按照命令一条一条向下进行的,如果后面没有再给b赋值的语句的话,b的值不会变,等于1。
c里的逻辑运算有个短路运算,意思就是说如果if(a&&b)里,如果a为假,则肯定a&&b结果就为假,b就不会被运算,同样如果if(a||b)中,如果a为真,则a||b肯定为真,同样b也不会被运算。
因为在逻辑表达式A && B中,只要表达式A的值为0,表达式B就不会执行
a=a+++b+++c++很显然这个表达式里面有运算符加号,所以要先分类, a= a++ + b++ + c++,层次清楚了在从运算规则分解表达式a=a+b+c;a=a+1;b=b+1;c=c+1;所以最后结果为4,2,2
对于!b||++a&&++c;按照规定, 要先计算 && (&&的优先级比||高)也就是需要计算出 ++b和c++;但是按照优化, 只要计算出 a>0 就可以了,不需要计算出 ++b和c++,“||”在这里起到了短路的功能(短路就是,当第一条表达式能决定整条表达式的结果,那么后面的语句都不执行!),这也叫做...
(b)0 解释:a =-1 执行a++&a++这边是与判断,按照自左向右运算规则,先算a++ = 0然后a=0&a++这边&结果为false后就不在继续向右运算了,所以后面俩次++没算到,结果为0 看我演示:真凭实据结果为0
a=b=1 //此时a值为1,b值为1;a++ //a自增为2 b+1 //不对b的值产生任何影响 c=a+b-- //首先,b--优先运算,运算结果是1,然后b自减为0,此时a值为2,再算c,所以c值 为 a+(b--)值为2+1=3
因为a++的值为0,a 的值为1,所以c=0;因为++在后面,所有a++表达式的值没有变,只是改变了a的值!
不要执着于自加自减的问题。具体可以看《编译原理》。在同一个语句内执行超过一个的自加、自减运算符后,编译生成的结果和我们预想结果不一样。
,首先a>b为假,那么(a>b)&&(++a == 5)一定为假,计算机的优化就不会再计算++a == 5了,因此a的值不变。2、0||(c>b--),b--的返回值为8,然后b再变成7。即判断c>8,为假。3、最终d1 = 0 || 0,因此d1 = 0,而a和c没有变化,b做了一次减一,就会是上面的最终结果 ...