3.2 运算符与表达式

一、运算符(见运算符专题)

1、先考虑优先级,优先级相同时,考虑结合方向

2、记住算术运算符的结合方向都是自左向右,赋值运算符的结合方向是自右向左。

二、不同类型数据间的混合运算

如果一个算术运算符两边的数据类型不一致,则会先自动进行类型转换,使二者成为相同的数据类型,再进行运算。整型、实型、字符型数据之间可以进行运算。

2.1 自动类型转换

自动类型转换优先级示意图:

数据类型

低等级向高等级转换

同级横向转换

double

最高等级

float转double

long

次一等级

unsigned

第三等级

int

第四等级

char,short转int

原则 :

  1. char 和short 必须转换成int 型;float必须转换成double

  2. 不同类型间的运算参照有低等级向高等级转换。

    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 型

2.2 强制数据类型转换

形式:(类型名)(表达式)
值得说明的是,在强制类型转换时,得到一个所需类型的而中间数据,而原来变量的类型,并未发展转化。 例:

	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插件快速发布