int a=2; a*=2+3;a的值为什么等于12?
是10 不是12.
怎么算也算不出来12啊.
a*=2+3;
+优先级比*=要高. 所以先算加法.
a*=5
a=a*5=2*5=10
a*=2+3
先计算右侧加法, 于是是
a*=5
等效于a=a*5
然后 带入a
a=2*5=10;
这个是不可能等于12的.
int a=2; a*=2+3;a的值不等于12,而是10。
a*=2+3;这个程序算式中是优先算2+3的,因为+的优先级比*=高。
也就是a*=5;
a*=5相当于a=a*5,又因为已经定义了a=2,所以a*5=2*5=10。
printf(a)时运行程序后得出结果也是10。
扩展资料
C语言中的运算符优先级介绍:
运算符的优先级确定表达式中项的组合。这会影响到一个表达式如何计算。某些运算符比其他运算符有更高的优先级,例如,乘除运算符具有比加减运算符更高的优先级。
例如 x = 7 + 3 * 2,在这里,x 被赋值为 13,而不是 20,因为运算符 * 具有比 + 更高的优先级,所以首先计算乘法 3*2,然后再加上 7。常见的运算优先级如下:
1、后缀 () [] -> . ++ - - 从左到右
2、一元 + - ! ~ ++ - - (type)* & sizeof 从右到左
3、乘除 * / % 从左到右
4、加减 + - 从左到右
5、移位 << >> 从左到右
6、关系 < <= > >= 从左到右
a的值是10 ,不是12。
int a=2; a*=2+3;语句执行过程:
int a=2;//将2赋值给a
a*=2+3;//要考虑运算符的优先级,运算符+的优先级大于*=,故a*=5,即a=a*5。a被赋值为2,所以a=2*5=10。
扩展资料:
运算符优先级:
1、优先级
单目运算符 > 双目运算符 > 三目运算符;
2、单目运算符优先级
结合性规定对于一元运算符是冗余的,只为完备而给出:一元前缀运算符 始终 从右到左 结合,delete ++*p 被解释为 delete(++(*p)) ;而 一元后缀运算符 始终 从左到右 结合,a[1][2]++ 被解释为 ((a[1])[2])++
3、双目运算符优先级
四则运算运算符 > 移位运算符 > 关系运算符 > 逻辑位运算符 > 逻辑运算符 > 赋值运算符;
四则运算符中,+、- 优先级低于 *、/、%;
比较运算符中,==、!= 优先级低于 >、<、>=、<=;
4、三目运算符优先级
C 中,三元条件运算符拥有高于赋值运算符的优先级。因此,表达式 e = a < d ? a++ : a = d 在 C++ 中剖析成 e = ((a < d) ? (a++) : (a = d)),但在 C 中会由于 C 的语法或语义制约而编译失败。
怎么可能等于12呢?
这种东西自己试一下就好了。
答案是肯定是10,
a*=2+3也就是a=a*(2+3)=2*5=10。
#include<stdio.h>
int main(void)
{
int a=2;
a*=2+3;
printf("%d",a);
return 0;
}
上面的代码放到vc下面 运行一下,输出a的值看看。
复合赋值运算符(+=、-=、*=、/=)的优先级低于算数运算符(+、-、*、/),所以a *= 2 + 3可写作
a = a * (2 + 3),由此可见,2 * (2 + 3) = 10。
执行顺序如下:
1、a=2 a初始化为2
2、2+3 得到一个临时值5
3、a*=() 等价于 a=a*() , 这儿的括号里是上面的结果5,因此a=2*5 ,最后得到10.
江货半夏: a*=2+3,相当于a=a*(2+3),a的值最后为10
陈巴尔虎旗13649906079: 求大神解答c语言,int a=2 a*=2+3.结果,并解释下,多谢 - ?
江货半夏: int a=2;a*=2+3;等价于a=a*(2+3);a=2*5=10;
陈巴尔虎旗13649906079: 求大神解答c语言,int a=2 a*=2+3.结果,并解释下 - ?
江货半夏: 结果是10 int a=2 a*=2+3 a=a*(2+3)=10
陈巴尔虎旗13649906079: 若 a 为int型变量,且a=2,则表达式 a*=2+3 的结果为 - ?
江货半夏: a*=2+3 a=a*(2+3)10
陈巴尔虎旗13649906079: int a=2; a*=2+3 C语言最后为什么运算结果是12.最好能解释的简单点,我是初学者 - ?
江货半夏: a*=2+3 先计算右侧加法, 于是是 a*=5 等效于a=a*5 然后 带入a a=2*5=10; 这个是不可能等于12的.
陈巴尔虎旗13649906079: 求帮助 int a=12;写出a*=2+3该表达式的返回值 - ?
江货半夏: int n) {int i;int min;min=a[0];);stdio;i++)for(j=0;n";i<n;i++)if(min>a[i])min=a[i];return min;int b[ROW]; for(i=0;i!=ROW,j; }#include < system("PAUSE" for(i=1;n",last)!=ROW;i++)b[i]=min(a[i]; printf("%d\,a);return 0; }int main() {int...
陈巴尔虎旗13649906079: c语言,vc6.0中,a=2,a*=2+3,a变为多少?把乘号改为加号呢? - ?
江货半夏: a*=2+3 就是 a=a*(2+3) a=10
陈巴尔虎旗13649906079: c语言中这样的一题目 int a=2; a+=a*=a - =a*=3; - ?
江货半夏: *的优先级比+=和-=高,所以先算a*a=3*3=9.+=和-=是同级的,但是右结合的,所以先算a-=9,结果a为3-9=-6.最后算a+=(-6)=(-6)+(-6)=-12.不过a*a后少了个分号,严格说就是错误语句,连编译都过不了的!
陈巴尔虎旗13649906079: main() { int a=2;a%=4 - 1; printf("\n%d,",a); a+=a*=a - =a*=3; printf("%d",a); } 求过程解释 - ?
江货半夏: int a=2; a%=3;即a=2%3=2 第一个输出2后面一串,从右到左 a-=a*=3就已经是0了. 所以最后一直都是0
陈巴尔虎旗13649906079: 若有定义:int a,b; 则表达式(a=2,b=5,a*2,b++,a+b)的值是? - ?
江货半夏: 若有定义:int a,b; 则表达式(a=2,b=5,a*2,b++,a+b)的值是9.逗号表达式的结果是最后一个表达式的结果,e799bee5baa6e79fa5e98193e4b893e5b19e31333365653261因此a+b=3+6. INT - 取整函数Int() Int是将一个数值向下取整为最接...