算数运算符和算术表达式
用算数运算符和括号将运算对象(也称操作数)连接起来的、符合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;