c语言int a=5,b=7;a+=a++||b++结果a=?

作者&投稿:平重 (若有异议请与网页底部的电邮联系)
在C语言中, int a=5,b; b=(++a)+(++a); 输出后为a=7,b=14这不合常~

++a的运算优先级比较高,所以先计算两个++a,然后执行加法;第二题X++,是先右边值赋值给Y,但是会先执行括号左边的X++,变成了6,然后再执行右边单独的x

答案:25

从下面的代码可以看出,事实也是++,--都比*优先级别高,实际执行a先自加1,为6,再自减1,为5,在经行乘法运算
测试代码
int main()
{
int a=5,b; b=++a*--a;
printf("%d
", b);
}

汇编代码
main:
leal 4(%esp), %ecx
andl $-16, %esp
pushl -4(%ecx)
pushl %ebp
movl %esp, %ebp
pushl %ecx
subl $36, %esp
movl $5, -12(%ebp)
addl $1, -12(%ebp)
subl $1, -12(%ebp)
movl -12(%ebp), %eax
imull -12(%ebp), %eax
movl %eax, -8(%ebp)
movl -8(%ebp), %eax
movl %eax, 4(%esp)
movl $.LC0, (%esp)
call printf
addl $36, %esp
popl %ecx
popl %ebp
leal -4(%ecx), %esp
ret
.size main, .-main
.ident "GCC: (GNU) 4.1.2 20070502 (Red Hat 4.1.2-12)"
.section .note.GNU-stack,"",@progbits

a=7.
a+=a++||b++ 可以看作是
a = a + (a||b);
a++;
b++;

所以,a||b = 1
然后再+1, 5+2=7

a=a+((a++)||(b++))
a=a+(5||7)
a=6+1=7

7


莲都区19313806925: c语言int a=5,b=7;a+=a++||b++结果a=? -
牟阀青可: a=7.a+=a++||b++ 可以看作是 a = a + (a||b); a++; b++; 所以,a||b = 1 然后再+1, 5+2=7

莲都区19313806925: int a=5,b=7,c; 执行c=a+++b后怎么算?为什么是a先自增? -
牟阀青可: 这个运行出来是12吧,c=a+++b--?c=(a++)+b;其实你自己编写程序的话,没必要弄成这样,可读性太差了.应该是考试的题吧,估计就是考一些运算符的优先级

莲都区19313806925: 已知int a=5,b=7;执行语句a+=a++||b++,则a= -- ,b=--?
牟阀青可: a=7 b=7 保证对.

莲都区19313806925: c语言编程输出a=5 b=7 a - b= - 2 a/b=71%急 -
牟阀青可: #include int main(int argc, char **argv) { int a = 5; int b = 7; printf("a=%d\r\n", a); printf("b=%d\r\n", b); printf("a-b=%d\r\n", a-b); printf("a/b=%d%%\r\n", a*100/b); return 0; } 请采纳!

莲都区19313806925: c语言问题int a=5,b=6,c=7,b>a&&c++ 结果为1,解析是这样说的,因为b>a的结果为一,整个表达式的结果已 -
牟阀青可: 姐们,你考二级呢吧.这个问题很简单啊. 题目的意思是说:b>a&&c++这个表达式最后的值. b>a是true,c++比0大,所以也是true.所以最终的结果也是true. 而c语言里面逻辑表达式为true就表示值为1. 综上可知,结果为1. 补充一点:它说的是表达式的值,而不是c的值

莲都区19313806925: 设有语句“int a=5,b=7,c=15,d=b - a||(c=a b) ;”,则c的值是--- -
牟阀青可: 赋值使b为9的语句是( D) D) b = (a++==6)?8:9; a++本身=5; 判别是否=6,条件是否,b选择=9

莲都区19313806925: 编写一个C语言程序:要求是1)a等于5,b等于7,c等于3; 2)s等于a加2b减c平方;3)求a,b,c,s的大数. -
牟阀青可: #includevoid main(){int a=5,b=7,c=3;int s,max;s=a+2*b-c*c;if(a>b) max=a;else max=b;if(c>max) max=c;if(s>max) max=s;printf("s=%d,a、b、c、s中最大的数为%d\n",s,max);}

莲都区19313806925: c语言加法运算,要详细步骤 -
牟阀青可: C编译器匹配操作符的模式是贪婪匹配,也就是在语法成立的情况下匹配尽可能多的操作符. 编译器看到a+++b一句后,先尝试匹配一个+号,发现符合+运算符;再尝试匹配两个+号,发现符合++运算符;再尝试匹配三个+号,发现没有+++运算符,因此最终将前半部分解释为a++.剩下的一个+号只能匹配+运算符,因此整个表达式被解释成(a++) + b.最终结果是先计算a+b的值赋给c,然后将a+1.因此a=6,b=7,c=12.

莲都区19313806925: c语言中int a=5怎么计算 a+=a - =a*a 要带个解释… -
牟阀青可: -40. a+=a-=a*a→a+=a-=25→a+=-20→-40.

莲都区19313806925: int a=5,b; b=++a* -- a; b=? 兄弟这个解释下为什么++a,--a 还是5的呢 -
牟阀青可: 前缀 ++a,--a int a=5; b= (++a) * (--a); b= (a) * (a); 第一步做: ++a , a得6 第二步做: --a , a得5 再做 a * a, 现在的 a 是 5, 5x5=25.如果是:b= (++a) * (++a); b= (a) * (a); 第一步做: ++a , a得6 第二步做: ++a , a得7 b = 7 * 7 得 49

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