算数运算符和算术表达式

用算数运算符和括号将运算对象(也称操作数)连接起来的、符合C语法规则的式子,称为C算术表达式。

运算对象包括常量、变量、函数等

各类数值型数据间的混合运算

10+‘a’+i*f-d/e

1.先将‘a’转换成整数97,运算结果为107

2.先将i与f转为double型,运算结果为double型

3.先将107转换成双精度型,结果为double型

4.最终结果为double型

i为整型     f为float型    d为double型       e为long型

练习:

写出下面程序的运行结果

int main()

{ int i=6,y=4,z=2;

  printf("%d\n",i/y%z);                                     运行结果:

  printf("%f\n",2.5+1*7%2/4);                           1

  return 0;                                                        2.500000

}


赋值运算符和赋值表达式

简单赋值运算符:=

格式:变量=表达式;

先计算运算符右边的表达式,然后将其值赋给等号左边的变量。

例子:x=x+10;y=x*x+x;

C语言赋值运算符与数学中的等号含义有着本质的不同。


赋值过程中的类型转换

#include<stdio.h>                   运行结果:5     23.000000

void main()                     

{ int i;

  float f;

  i=5.34;

  f=23;

  printf("%d%f\n",i,f);

}

1.实型数据(包括单、双精度)赋给整型变量时,舍弃实数的小数部分。

2.整形数据赋给单、双精度变量时,数值不变,但以浮点数形式存储到变量中。

3.长度相同的有符号与无符号整型数间,原样赋值(但数值有时会有变化)。

#include<stdio,h>

void main()

{ unsigned a;

  int b=-1;

  a=b;

  printf("%d_>%u\n",b,a);

  a=65534u;                                  运行结果:

  b=a;                                          -1_>65535

  printf("%d_>%u\n",b,a);             -2_>65534

}

4.char、int、long等类型的转换

a.”短“数据赋给”长“变量

   符号扩展:若最高位为1(负数),则变量高字节位补1;反之,补0.

#include<stdio.h>

void main()                             运行结果:

{ char c;                                  i=43

  int i;                                     i=-2

  c=43;

  i=c;

  printf("i=%d\n",i);

  c='\376';

  i=c;

  printf("i=%d\n",i);

}

b.”长“数据赋给”短“变量

  只将数据的低字节位原封不动送到变量中(数据有可能有差错)。

#include<stdio.h>

void main()

{ int i;

  long L=6324232L;

  i=L;

  printf("i=%d,L=%ld\n",i,L);

}


赋值运算符和赋值表达式

复合算术赋值运算符

名称                   运算符         例子:

加赋值               +=               a+=b     a=a+b

减赋值               -=               a-=b      a=a-b

乘赋值               *=                a*=b      a=a*b

除赋值               /=                a/=b      a=a/b

模赋值              %=               a%=b     a=a%b

操作符左边只能是变量,不能是变量和表达式 

赋值运算符的结合性是“自右至左”。

例子:已知x=10,则x+=x-=60的值为?

先做x-=60,等价于x=x-60,这时x的值变为10-60,

即-50;

然后再做x+=x,等价于x=x+x,则x的值变为-50+(50),

即-100。所以最后的结果为-100。

复合位运算赋值运算符

按位与赋值运算符&=,         如a&=b,       等价于a=a&b,

按位或赋值运算符|=,             如a|=b,           等价于a=a|a,

按位异或赋值运算符^=,        如a^=b,          等价于a=a^b,

位右移赋值运算符>>=,         如a>>=b,     等价于a=a>>b,

位左移赋值运算符<<=,         如a<<=b,       等价于a=a<<b,

赋值表达式

由赋值运算符讲一个变量和一个表达式连接起来的式子,称为“赋值表达式”。

形式:变量-=表达式              如:a=5、a=(b=5)(右结合)

计算过程:1.计算赋值运算符右侧“表达式”的值,

                2.将计算结果赋给左侧的变量,

                3.赋值表达式的值就是被赋值的指示变量的值。

例如:a=b=c=5                 //表达式值为5,a,b,c值为5

         a=(b=5)                   //b=5;a=5

         a=5+(c=6)               //表达式值11,c=6,a=11

         a=(b=4)+(c=6)        //表达式值10,a=10,b=4,c=6

         a=(b=10)/(c=2)       //表达式值5,a=5,b=10,c=2

例子:a=12;

         a+=a-=aa             //a=-264等价于a=a+(a=a-(aa))

例子:int 2;

         a%=4-1;             //a=0  等级于a=a+(a=a*(a=a-(a=a*3)))

        a+=a*=a-=a*=3;