1、先考虑优先级,优先级相同时,考虑结合方向
2、记住算术运算符的结合方向都是自左向右,赋值运算符的结合方向是自右向左。
如果一个算术运算符两边的数据类型不一致,则会先自动进行类型转换,使二者成为相同的数据类型,再进行运算。整型、实型、字符型数据之间可以进行运算。
自动类型转换优先级示意图:
数据类型 | 低等级向高等级转换 | 同级横向转换 |
|---|---|---|
double | 最高等级 | float转double |
long | 次一等级 | |
unsigned | 第三等级 | |
int | 第四等级 | char,short转int |
原则 :
char 和short 必须转换成int 型;float必须转换成double
不同类型间的运算参照有低等级向高等级转换。
int i ; float f ; double d ; long e;
10+'A'+ i*f -d/e
//结果应该是什么类型???
//首先先看的优先级:
//必然是先算i*f的,int i ; float f,float必须转换成double,int向高等级的double转换,所以这俩计算结果为double
//和*同级的d/e再计算,因为考虑到了结合方向是从左到右的。double d ; long e ,long 向double转换,所以也是double 型。
//10+'A',10默认是int 型,‘A’作为char型要向int 转换,他俩计算结果是int
第二步:
int+double+double
//很明显需要int 向double转换
//最终结果为double 型
形式:(类型名)(表达式)
值得说明的是,在强制类型转换时,得到一个所需类型的而中间数据,而原来变量的类型,并未发展转化。 例:
float x =10.1f;
int a;
a=(int)x;
printf("%d\n",a); //结果:10
printf("%lf\n",x); //结果:10.1
//进行强制类型转换后,出现一个x的临时值
//这个值时是x的整数部分,把它赋给整型变量a;
//x值得值和类型都并未发生变化,只是产生了一个临时值,
//在该临时值完成赋值后,这个临时值便不存在了。
本文章使用limfx的vsocde插件快速发布