vlambda博客
学习文章列表

鸣小亮c语言笔记(1)——运算符与表达式



鸣小亮c语言笔记(1)——运算符与表达式

1.根据运算符性质分类:
算术运算符,关系运算符,逻辑运算符,赋值运算符等。
2.根据
操作数的个数进行分类:
仅仅需要一个操作数的个数的运算符为单目运算符;需要两个操作数个数的为双目运算符;同理,三目运算符需要三个操作数。

运算符和运算对象(操作数)按一定规则结合在一起就构成了表达式


鸣小亮c语言笔记(1)——运算符与表达式
鸣小亮c语言笔记(1)——运算符与表达式
表 1 算术运算符及其含义

1 两个整数做除法运 算,结果仍为整数,舍去小数部分的值。例如:
6/4=1
在这里6/4的结果的小数部分就已经被舍去了;但当参与运算的操作数只要有一个是实型数据,则结果就为double型。例如:
6/4=1.5
2.  求余运算符'%'要求参与运算的两个操作数为整数。其中左侧为被除数,右侧为除数,运算的结果为整除后的余数,余数的符号与被除数的符号相同。
3.  c语言中的相乘只能用 * 表示,不能把 * 省略,或者用X表示。
4.  数学表达式在书写中会出现“【】”和“{}”表示运算顺序,但在c语言表达式中式不允许的。例如:
[(a+b) * c]/(2/a)
该表达式是错误的。
5. 表达式中出现了c语言不允许的标识符。例如:
2 * π * r是错误的,应该表达成 2 * 3.14159 * r
或者先定义符号常量PI:
#define PI 3.14159
则表达式可以写成:
2 * PI * r
6. 算术运算符优先级与结合性:
鸣小亮c语言笔记(1)——运算符与表达式
表2 算术运算符优先级与结合性
鸣小亮c语言笔记(1)——运算符与表达式
简单赋值运算符“=”
“=”是一个双目运算符,具有右结合性。格式为:
变量名=表达式
1. “=”右边为任何合法的表达式,也可以是另一个赋值表达式,即“=”可以连用。如:
a=b=c=d=3;
2. “=”左边只能是变量,不能是算术表达式或常量。例如:
45+x=100
45=x+y 
都是错误的。

复合赋值运算符
在简单“=”前面加一个双目运算符后,就构成了复合赋值运算符。
涉及算术运算的复合赋值运算符共有5个:+=,-=,*=,/=,%=;
涉及位运算的赋值运算符共有5个:&=,|=,^=,<<=,>>=。
当复合运算符右侧是一个表达式时,由c语言编译系统给该表达式自动加括号,即先计算这个表达式的值,再进行复合赋值运算。

鸣小亮c语言笔记(1)——运算符与表达式
增1,减1运算符都是单目运算符,具有右结合性。
鸣小亮c语言笔记(1)——运算符与表达式
表3 增1,减1运算符的运算过程


1. 只需要一个操作数,操作数只能是变量,不能是常量或者表达式。例如:
2++
(a+b)++  
都是错误的。
2. ++和--的结合方向都是自右向左。例如:
int i;
printf("%d\n",-i++);
负号运算符-与++优先级相同,这时就要根据他们的结合性来确定运算顺序,单目运算符的结合方向是从右向左。即执行完Printf语句后,表达式-i++的值为-3,i的值为4。
3.  一行语句中最好出现一次增1或减1运算,因为过多的增1,减1混合运算会使程序的可读性变差。

鸣小亮c语言笔记(1)——运算符与表达式
鸣小亮c语言笔记(1)——运算符与表达式
表4 关系运算符

用关系运算符将两个操作数连接起来组成的表达式称为关系表达式。 关系表达式通常用于表达一个判定条件的真与假。
一个条件判断的结果只能有两种可能: 成立与不成立。 如果比较后关系式成立,则称为真,用非0表示; 如果比较后关系式不成立,则称为假,用0表示。
1. “==”与“=”是两种完全不同的运算符,前者为关系运算符的等于运算符,后者为赋值运算符。
2. 数学表达式与c语言关系表达式的含义不尽相同
a=3,b=2,c=1,a>b>c
先计算关系表达式a>b,成立,所以用1表示;再计算1>c,不成立(为假),所以用0表示。因此,最后结果为0。
鸣小亮c语言笔记(1)——运算符与表达式
鸣小亮c语言笔记(1)——运算符与表达式
表5 运算符集合表

运算符!是单目运算符,在逻辑运算符中优先级最高,优先级其次是&&,最后是||。
用逻辑运算符连接操作数组成的表达式称为逻辑表达式。逻辑表达式的值只有真和假,用1表示真,用0表示假。

鸣小亮c语言笔记(1)——运算符与表达式
表6 汇总的逻辑运算
鸣小亮c语言笔记(1)——运算符与表达式
条件运算符是c语言中唯一一个三目运算符,格式如下:
表达式1?表达式2:表达式3
该表达式执行过程是什么样的呢?
1. 先求第一个表达式的值。
2. 当第一个表达式值不为0时,求第二个表达式的值;当第一个表达式值为0时,求第三个表达式的值。
3. 条件表达式的结果是上步所求的第二个或第三个表达式的值。例如:
x>y?100:500;
如果x>y成立,则条件表达式的值为100;否则条件表达式的值为500。
鸣小亮c语言笔记(1)——运算符与表达式

强制类型转换运算符可以把表达式的结果硬性转换为一个用户指定的类型值。他是一个单目运算符。例如:
(int)9.3
是将double类型的常量强制性转换为int类型的常量,结果值为9。

逗号运算符“,“,也称为顺序运算符。用逗号运算符链接起来的式子称为逗号表达式。格式为:表达式1,表达式,……,表达式n。
逗号表达式按照从左向右的顺序逐个求解表达式,而整个表达式的值就是表达式n的值。例如:a=1,++a,a+10;
首先求解表达式1,a的值被赋值为1,
然后求解表达式2,执行后,表达式2的++a的值为2,a的值也为2。
最后,求解表达式3,a+10的值为12。所以逗号表达式的结果,为表达式3的结果,即12。


第一期笔记到这里就结束了,我们下期再会!