内容正文:
第2章 数据类型、运算符与表达式
本章内容
2.1 C语言的数据类型
2.2 常量与变量
2.3 运算符和表达式
2.4 运算符的优先级
2.5 数据类型转换
2.3 运算符和表达式
按操作功能大致可分为:算术运算符、关系运算符、逻辑运算符、赋值运算符、条件运算符、逗号运算符以及按位运算符等
2.3.1算术运算符和算术表达式
算术运算符
主要有基本运算符加(+)、减(-)、乘(*)、除(/)、求余(或称模运算,%)共五种和自增(++)、自减(--)运算符共2种
算数运算符运算规则
① “+、-、*”和数学中一样,直接运算。
② “/”运算符在运算时,如果两个操作对象的数据类型都是整型,则为整型除法,即运算结果为整数;如果有一个操作对象为实型,则为实型除法。例如5/2=2,5.0/2=2.5。
③ “%”运算符要求两个操作对象必须为整型数据。运算的结果为两个操作对象相除的余数,其中,运算结果的符号和%前面的操作对象的符号一致。例如5%2=1,-5%3=-2,3%5=3。
④ 字符型数据参与数学运算时,将使用字符的ASCII码进行运算。如’A’+1=66。
自增和自减运算符
前置:++j,--j,功能是j的值先加(减)1,然后再进行其它运算
后置:j++,j--,功能是j先作其它运算,然后j的值再加(减)1。
例如:
j=4;k=++j; 等价于 j=j+1;k=j;
j=4;k=j++;等价于 k=j; j=j+1;
2.3.2 赋值运算符和赋值表达式
分为简单赋值(=)、复合算术赋值(+=,-=,*=,/=,%=)和复合位运算赋值(&=,|=,^=,>>=,<<=)3类共11种
简单赋值运算符
简单的赋值运算符记为“=”,它的作用是将一个常量、变量或表达式的值赋给一个变量
例如:
a=3; /*表示将3赋值给变量a*/
a=b; /*表示将变量b的值赋给变量a*/
a=b*2; /*表示将变量b*2的值赋给变量a */
赋值运算注意事项
赋值号(=)左边只能是变量,绝对不能是常数或表达式。
赋值号右边表达式类型要与左边的变量保持一致。如果不一致,则先将右边表达式的值转换为与左边变量相同的类型,然后进行赋值。
赋值运算符的结合方向为“自右向左”
多个变量可以连续赋值。
赋值符号右侧可以继续包含赋值表达式。
例如:
int x,y;
x=10+(y=5);
复合赋值运算符
在赋值运算符“=”之前加上其他运算符,就构成了复合赋值运算符
a+=b; 等价于a=a+b;
注意事项:
复合赋值运算符右边的表达式是一个运算“整体”,不能把它们分开。如:a*=b+1等价于a=a*(b+1)
复合的赋值运算符的结合顺序为“自右向左”的。
例如:
int a=2;
a+=a-=a*=2;
等价于a=a+(a=a-(a=a*2));
所以最后变量a的值为0。
2.3.3 关系运算符和关系表达式
关系运算符有:小于(<)、大于(>)、小于等于(<=)、大于等于(>=)、等于(= =)、不等于(!=)6种
关系运算符
关系运算符都是双目运算符,其结合顺序为“自左向右”
关系运算的结果为1或0,如果关系成立,结果为1,否则为0
例如:
9>8>6的结果为0
2.3.4逻辑运算符与逻辑表达式
C语言中提供了3种逻辑运算符:
逻辑与运算符(&&)
逻辑或运算符(||)
逻辑非运算符(!)
逻辑运算符
非运算
非运算符!为单目运算符,功能为对操作对象进行逻辑取反
与运算
与运算符&&为双目运算符,功能为当两个操作对象都为真时,结果才为真,其余情况结果为假
或运算
或运算符||为双目运算符,功能为当两个操作对象都为假时,结果才为假,其余情况结果为真
逻辑运算符举例
int a=5,b=6;
!(a>b)
!a>b
int a=5,b=6,c=7,d=0;
a>b && c>6
a && b
d++ && c>b
int a=5,b=6,c=7;
a>b || c>6
a || b
a>b || b>c
逻辑短路1
在一个或多个连续的逻辑与运算中,如果前面操作对象的结果为0,则后面的操作对象表达式不会继续求解。
例如:
int a=5,b=6,c=7; a>b && c++;
上式的运算结果为0,且c的值为7
逻辑短路2
在一个或多个连续的逻辑或运算中,如果前面操作对象的结果为1,则后面的操作对象表达式不会继续求解。
例如:
int a=5,b=6,c=7;
b>a || c++
上式的运算结果为1,且c的值为7
条件运算符
一般形式为:
<表达式1>?<表达式2>:<表达式3>
运算规则:先计算表达式1的值,如果它的值为真(非0值),则求解表达式2的值,并将