int a=2; a*=2+3;a的值为什么等于12?
发布网友
发布时间:2022-04-25 15:10
我来回答
共5个回答
热心网友
时间:2023-08-01 15:14
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、关系 < <= > >= 从左到右
热心网友
时间:2023-08-01 15:14
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 的语法或语义制约而编译失败。
热心网友
时间:2023-08-01 15:15
怎么可能等于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的值看看。
热心网友
时间:2023-08-01 15:16
复合赋值运算符(+=、-=、*=、/=)的优先级低于算数运算符(+、-、*、/),所以a *= 2 + 3可写作
a = a * (2 + 3),由此可见,2 * (2 + 3) = 10。
热心网友
时间:2023-08-01 15:16
执行顺序如下:
1、a=2 a初始化为2
2、2+3 得到一个临时值5
3、a*=() 等价于 a=a*() , 这儿的括号里是上面的结果5,因此a=2*5 ,最后得到10.追问为什么 2+3 这个临时值等于6呀??>.<
追答我错了。。。尴尬死了,,,被楼主曼曼发现了
inta=2* a*5, a=多少?
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。
c语言中%2是什么意思?
题中a=0,p=2,所以0除以2的余数就是0。
如果inta=2,那么a*++a和a*a++的值分别是多少,为什么?
a*a++:等于4,++优先级比较高,a++先赋值后自加,所以a等于2,那么2*2=4
如果inta=2,那么a*++a和a*a++的值分别是多少,为什么?
a*a++:等于4,++优先级比较高,a++先赋值后自加,所以a等于2,那么2*2=4
C语言:a=3,a+=a-=a*a,求a
1.a=a-a*a=3-3*3=-6; 2.a=a+a=-6+(-6)==-12; 扩展资料: 先计算a*a=9,此时a=3,没变。a的最终值为-12。 a的最终值为-12。#include<stdio.h> intmain() { inta,min,max,mid;/*定义变量*/ scanf("%d%d%d"&a,&b,&c);/*读取输入变量*/ min=a<b&&a<a:(b<b:c); /*取最...
硬编码与软编码的区别,利弊?
的标记名称来代替就是一种很好的方法。通常情况下,都应该避免使用硬编码方法。4、java小例子:int a=2,b=2;硬编码:if(a==2)return false;非硬编码 if(a==b)return true;(就是把数值写成常数而不是变量 )一个简单的版本:如求圆的面积 的问题 PI(3.14)那么3.14*r*r 就是硬编码,...
c语言inta=2,b=1;则a--==b的结果
int a = 2, b = 1;运行之后,a 的内容是 2,b 的内容是 1a-- == b其中 a-- 会使 a 的内容变成 1,但是 a-- 的值却是改变以前的值,即 2。2 跟 b 里面 1 的值比较,是不相等的,所以 a-- == b 这个表达式的值是 0。
a*++a和a*a++的值是多少,假如inta=2,为什么
答案是9和4。++(自增1)运算符的优先级比*(乘)运算高,++运算符做为前缀时是先把a的值自增1后,再取其值进行计算(++a : a=a+1),此时a=3,3*3=9。++运算符做为后缀时,是先取a的值进行运算,再把a的值增1,此时a还是=2,所以a*a=4。
如何理解C语言中的关键字和运算符?
int a=1;前一句就是对和inta=1;的,int a=1;就是命名一个整形的变量a等于1。而inta=1;错误的,因为inta如果是一个变量名的话,那它就没有数据类型了int a,b,C; 逗号也是分隔符的一种,表示命名三个变量,分别是a,b,C 5、其他符号 括号[] - 括号的打开和关闭用于数组元素引用,表示单...
设inta三二等于二四六八,a是行指针十十二
(*prt)[3]=a指的是(*prt)+3的这块指针指向2维数组a的首地址,prt应该是个2维指针.p=a[0]指的是大小为3的第二维数组的首地址.如果不对指针做加法运算的话,不用计较它真正指向几维数组,他们指向的都是a、a[0]、a[0][0]的地址.