一、运算符概念及使用
C语言的表达式是由运算符和运算对象组成的。最简单的表达式可以只包括一个运算对象,而复杂的表达式可以是运算符和运算对象任意组合。根据运算规则,任何一个表达式都有一个确定的值。其中表达式包括:常量表达式、变量表达式、算术表达式、赋值表达式、函数表达式等。
运算规则:
1、根据运算符的优先级,优先级高的先与相应操作数构成子表达式,优先级低的后与相应操作数构成子表达式。
2、当两个运算符优先级相同时,则根据运算符的结合性的结合方向,左结合的运算符从左到右与相应的操作数构成子表达式;右结合的运算符从右到左与相应操作数构成子表达式。只有单目运算符、条件运算符和赋值运算符为右结合。
注意:运算符的优先级和结合性只与子表达式的划分有关,与计算次序无关。一般来说,构成子表达式只是在数字两边加上()。通常,从左往右计算。
二、算术运算符
1、除法运算符“/”的两种不同含义。
有两种类型:整数除和实数除。当两个整数相除时,结果仍为整数,即只保留整数商,而舍弃小数部分。否则,只要两个操作数中有一个是实数,可以得到真实的小数结果。
2、求余运算符"%"
两个操作数必须为整数,不能出现实数。余数的符号与被除数相同。若被除数为正,则结果为正;若为负,则结果为负
3、数学函数的使用
在算术表达式中还会使用到一些常用数学函数。一般情况下,调用数学函数需要#include<math.h>预处理命令。
函数名 功能 函数名 功能
sqrt(x) 计算x的平方根 exp(x) 计算e^x的值
fabs(x) 计算x的绝对值 pow(x,y) 计算x^y的值
log(x) 计算lnx的值 sin(x) x为弧度制
log10(x) 计算lgx的值 cos(x) x为弧度制
三、关系运算符
关系运算是用来比较两个操作数的值的运算,比较结果是一个逻辑值,只能为“真”或“假”。通常用“0”表示“假”,“非零”表示“真”。
四、逻辑运算符
逻辑运算的对象是逻辑值,运算结果仍是逻辑值。逻辑运算中可能会出现特殊情况,逻辑短路---对于&&运算符时,只要第一操作数为假,则不执行第二操作数;对于||运算符时,只要第一操作数为真,则不执行第二操作数。
五、条件运算符
格式为:<表达式1>?<表达式2>:<表达式3>。若<表达式1>为真,则结果为<表达式2>的值,否则为<表达式3>的值。
六、赋值和复合赋值运算符
赋值运算的功能是将一个表达式的值赋给一个变量,赋值运算符用“=”表示。复合赋值格式为:<变量><双目运算符>=<表达式>
七、逗号运算符
逗号运算符“,”仅仅起到将多个表达式连接在一起的作用。按照表达式顺序从左到右依次计算表达式。
八、自增、自减运算符
1、“前++”“前--”表示先对变量进行自增、自减1运算,再将变量更新后的值作为自增、自减表达式的值。
2、“后++”“后--”表示先将变量原来的值作为自增、自减表达式的值,再对变量进行自增、自减1运算。
九、数据类型转化
1、赋值中自动类型转化
从低到高进行类型转化:char、short→int→unsigned→long→float→double
具体规则:
(1)、当表达式的数据类型占用内存的字节数小于变量类型占用内存的字节数时,即由低长度类型向高长度类型赋值时,数据直接可以转换,不会出现数据信息丢失。
(2)、但是反之,由高长度类型向低长度类型赋值时,就有可能出现数据精度下降,甚至数据溢出等问题。
2、强制类型转化
格式为:(<类型>)<类型>