C语言表达式和算术运算符
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
算术表达式中数据类型的转换
3、各类型数值数据的转换 当表达式中的各类数值型数据参与混合运算时, 要进行类型转换
下面表达式合法:1+3.14159+’0’+’A’ 转换方式 自动转换:数据类型自动由低级向高级转换。 强制转换:将表达式的运算结果强制转换成指定的
数据类型。
算术表达式中数据类型的转换
自动转换规则:
赋值运算符和赋值表达式
注意:
1)复合运算符左边必须是变量
2)复合运算符右边的表达式计算完成后才参与复合 赋值运算
3)复合运算符的结合性和优先级等同于简单赋值运 算符”=”
4)复合运算符常用于某个变量自身的变化,尤其是 当左边的变量名很长时,使用复合运算符书写更 方便。书写时,两个运算符之间不能有空格。
如:17%-3=2 -19%4=-3 -15%-7=-1
5%1.5是非法的算术表达式
2)除法运算符“/”进行求商运算。对于不同类型的运算对象, 除法表达式计算结果的类型也会不同。
例:计算x/y 如果x,y为整型,小数部分舍去,没有四舍五入 如果x,y中有一个为实型量,则x,y都被化为double类型进
}
赋值结果与类型转换
43号字符'+' '\53' 0 0 1 0 1 0 1 1
i 0 0 00 00 00
00 10 10 11
254号字符 '\376' 1 1 1 1 1 1 1 0
i 1 1 11 11 11
11 11 11 10
赋值结果与类型转换
② “长”数据赋给“短”变量
截断: 只将数据的低字节位 原封不动送到变量中
行计算,结果为double
算术运算符和算术表达式
运算实例: x,y为整型量:5/2结果为2,整型量
2/5结果为0,整型量 x,y其中一个为实型量 5.0/2或 5.0/2.0或 5.0/2.0结果为2.5,实型量
练习:
例 1/2 = 0 -5/2 = -2 -5/2.0 = -2.5
例 5%2 = 1 -5%2 = -1 5%-2 = 1 1%10 = 1 5%1 = 0 5.5%2 =
a*b/c-1.5+ 'a' 3*x+1.0/y―10*sqrt(x) (x+y)%(x+b-c/d) 100 x
算术运算符和算术表达式
说明:
1)“%”是求余运算。a%b计算a除以b以后的余数,也是a模 b的值。它要求两个运算对象都是整型量,其结果也是整型 量。当运算量为负数时,所得结果的符号与被除数(a)相 同。
赋值结果与类型转换
例: void main ( ) { int i;
float f; i = 5.34; f = 23; printf ("i=%d,f=%f\n", i, f ); }
结果: i=5,f=23.000000
赋值结果与类型转换
4)char、int、long等类型的转换 ①“短”数据赋给“长”变量
高 () + - (正号, 负号) */%
低 + - (加, 减)
▪ 例: a*b/c-1.5+ 'a' (x+y)%(x+b-c/d)
例如 (-16/3*2+1)%6的值 _______.
计算方法:-16/3值为-5, 然后-5*2+l值为-9,最后- 9%6值为-3。
算术运算符和算术表达式
3)双目运算符两边的运算类型必须一致才能进行操 作,所得结果类型与运算类型一致;
结合性: 同一优先级,自 左向右,为左结合性,反 之为右结合性。
初等运算符( [ ]、( )、 . 、-> ) ↓
单目运算符
↓ 算术运算符
↓ 关系运算符
↓ 逻辑运算符(不包括逻辑非运算
符!) ↓
赋值运算符
↓ 逗号运算符
3.5.2算术运算符和算术表达式
1、基本的算术运算符:
+ (加法运算符,或正值运算符。如:3+5、+3) - (减法运算符,或负值运算符。如:5-2、-3) * (乘法运算符。如:3*5) / (除法运算符。如:5/3) % (模运算符,或称求余运算符,%两侧均应为整型数据,
5)C语言规定可以使用10种复合赋值运算符:
+=,-=,*=,/=,%=,<<=,>>=,& =,∧=,|=
赋值运算符和赋值表达式
3、赋值类型转换 如果赋值号两边的类型不一致,则将赋值号右边
表达式的值的类型转换成赋值号左边变量的类型; 例:float f=1.0
int a=2,b=3; char c=‘A’; f=a+b+c; (f为实型量,结果为70.0)
^(异或), <<(左移), >>(右移); C 赋值运算符:= 及其扩展赋值运算符 运 条件运算符:?: 算 逗号运算符:, 符 指针、地址运算符:* &
求字节数 :sizeof 强制类型转换:(类型) 成员运算符:. -> 下标运算符:[ ] 其它 :函数调用运算符( ) 等
运算符和表达式
优先级是指表达式中包含 多个运算符时,先进行优 先级高的运算符操作,然 后进行优先级低的运算符 操作; 当表达式中包含的几个运 算符的优先级全相同时, 由运算符的结合性来决定 他们的运算顺序。
3. P59 3.3 3.4
3.5.3赋值运算符和赋值表达式
1、赋值运算符和赋值表达式 赋值表达式的一般格式为:变量=表达式 说明:
1)赋值运算符左边必须是变量而不能是常量或 表达式,右边是合法的c语言表达式; 例:j+3=j a*b=c*4 5=x x+1=y*a+3 错误 2)赋值表达式的值是赋值号左边变量被赋值后 的值;正确的表示形式: x=10 x=y n=n+1 3)赋值语句可以连续进行 a=b=7+1
float
自动
double
高
long
unsigned
Char 自动
低
int short
算术表达式中数据类Βιβλιοθήκη Baidu的转换
▪ 例: int i; float f; double d; long e;
10+‘a’ +i*f - d/e
int double double
int double double
double
等价于a=(b=(c=0)
赋值运算符和赋值表达式
2、复合的赋值表达式 算术运算符“+-*/%”和赋值运算符”=“结合 +=:a+=b+3,等价于a=a+(b+3) -=: a-=b+3,等价于a=a-(b+3) *=:a*=b+3,等价于a=a*(b+3) /=:a/=b+3,等价于a=a/(b+3) %=:a%=b+3,等价于a=a%(b+3) >>=,<<=,&=,^=,|=
户源文件中
使用数学库函数
在使用数学库函数以前,需使用编译命令 #include “math.h” 例:计算x(2+xy)的值 #include “math.h” main() {double x,y; x=5.0;y=7.0; printf(“z=%f\n”,x*(2.0+pow(x,y))); }
赋值结果与类型转换
说明: 1)实型数据(包括单、双精度)赋给整型变量时,舍弃 实数的小数部分。 如:设 i 为整型变量,执行 i = 5.34, i 的值为 5 2)整型数据赋给实型变量时,数值不变,但以浮点数形 式存储到变量中。 如:对 float 型变量 f ,执行 f = 23 f 的值为 23.000000 3)double赋给float型变量时,截取其前面7位有效数字, 存储到float型变量的存储单元; float型变量赋给double 时,有效位扩展到16位,在内存中以8个字节存储
第3章 表达式和运算符(3)
3.5 运算符和表达式
3.5.1 运算符的种类、优先级和结合性 3.5.2 算术运算符和算术表达式 3.5.3 赋值运算符和赋值表达式 3.5.4 增量运算符和增量表达式 3.5.8 逗号运算符和逗号表达式
3.5运算符和表达式
算术运算符:+ - * / % 自增自减运算符:++ -关系运算符:< <= == > >= != 逻辑运算符:!(逻辑非), &&( 逻辑与), ||(逻辑或); 位运算符 :~ (按位取反), &(位与), |(位或),
赋值结果与类型转换
5)无符号整型与有符号整型
例:
1 1 11 11 11 11 11 11 11
b
void main( )
{ unsigned a; int b = -1;
11 11 11 11 11 11 11 11
a
a = b;
printf ( "%d -> %u\n", b, a );
a = 65534u; b = a ;
double
练习:
1.若有定义:int a; 则语句a=(4 * 5)+ 4 % 5; 运行后,a的值为( )
2 . 设 double 型 变 量 a,b,c,e 均 有 值 ; 对 代 数 式 (3ae)/(bc),不正确的C语言表达式是( )。 (A) a/b/c*e*3 (B) 3*a*e/b/c (C) 3*a*e/b*c (D) a*e/c/b*3
void main ( ) { short int i;
long l = 6324232L;
i = l;
printf ( " i = %hd\n", i );
}
l=6324232 0 0 00 00 00 01 10 00 00 10 00 00 00 00 00 10 00
i = -32760 10 00 00 00 00 00 10 00
算术运算符和算术表达式
(3)算术表达式 是由算数运算符和操作数组合成的式子,算术表
达式用于各类数值运算。除求余运算符%外,运算 对象可以是整型,也可以是实型。
如:(-b-sqrt(d))/(2.0*a)
运算对象包括常量、变量、函数等。 一个常量、变量都可作为一个表达式。 例: 以下是合法的算术表达式:
如:1.0/2.0=0.5 1/2=0
4)如果类型不一致,系统将自动把两边转换成相同 类型后进行运算;
如:1.0/2=0.5 1/2.0=0.5
整型转实型 短整型转长整型 有符号转无符号
5)C语言中所有实数的运算均以双精度方式进行, 若是单精度数,则在尾数部分补0,使之转化为双 精度;
算术运算符和算术表达式
如:7%4的值为3)。
算术运算符的优先级别: *、/、%优先于 + 、 − (*、/、
%不分) ,()级别最高,单目运算符优先双目运算符 如−2−4
算术运算符和算术表达式
2、算术表达式 (1)表达式 由常量、变量、函数和运算符组成的式子称为表达式 例:计算圆面积的语句
s=3.14159*r*r; 该语句中r,3.14159,3.14159*r,3.14159*r*r, s=3.14159*r*r都是表达式 *是运算符, 3.14159是常量,s是变量 (2)表达式的求值规则,按照运算符的优先级和结 合性的规定顺序进行。一个表达式有一个值及其类 型
例:将数学式改写成算术表达式 一般数学式 算术表达式 [a(b+c)+d]ac (a*(b+c)+d)*a*c
3.14159*r*r/2.0 x/(x+y)+1.0/x*y
基本运算符实例 基本运算符实例: main() {int a,b,c1,c2; a=3,b=7; c1=b/a; c2=b%a; printf(“c1=%d\tc2=%d\n”,c1,c2); c1=a/b; c2=a%b; printf(“c1=%d\tc2=%d\n”,c1,c2); }
printf ( "%d -> %u\n", b, a );
结果:
} -1 -> 65535
-2 -> 65534
赋值运算符和赋值表达式
赋值表达式 由赋值运算符将一个变量和一个表达式连接起来 的式子称为“赋值表达式”。
符号扩展:若最高位为 1(负数),则变量高字节位补 1;
反之,补 0。
void main ( )
{ char c; short int i;
c = 43; i = c;
printf ( " i = %hd\n", i );
43
c的值?
c = '\376'; i = c;
-2
printf ( " i = %hd\n", i );
标准库函数调用
对于某些数学运算,如求平方根,指数,对数运算,C 语言中有标准库函数对其进行计算。
调用格式:函数名(参数,参数,····) 其中函数名由系统提供,不同C编译系统,提供的函数
名不同,使用时需查阅相关手册。 调用函数时,参数的类型必须与系统规定一致 调用标准库函数之前,通常要用预编译命令 “#include math.h”将所需要的库函数信息包含到用