c语言中运算符和表达式
一、算术运算符和表达式
1.1算数运算符
(+、-、*、/ 操作数可以是任意的基本数据类型,字符型数会自动的转换成整数)
"+"单目正
"-"单目负
"*"乘
"/"除和整除(除数和被除数都是整型数时,结果只保留整数部分,小数部分舍弃,除数和被除数有一个是浮点数,进行浮点数相除)
"%"取余/取模(两个操作数只能是整数)
"+"双目加
"-"双目减
1.2算术表达式
1.2.1运算符的优先级高到低:
1.2.2类型转换
(1)自动类型转换
(2)强制类型转换
(类型名)表达式
高类型向低类型转换可能有数据丢失,低类型向高类型一般只是形式上有改变而不影响数据的实质。
二、赋值运算符和表达式
2.1 赋值运算符
"="等号右边的值赋给等号左边
“+=” 加 a+=b等价于a=a+b(下方符号同理)
“-=” 减赋值复合运算符
“*=” 乘赋值
“/=” 除赋值
“%=” 求余赋值
"&="位与赋值
"|="位或赋值
“^=” 位异或赋值
">>="位右移赋值
"<<="位左移赋值
2.2赋值表达式
变量=表达式
2.3特殊的赋值运算-自增自减
++变量
变量++
--变量
变量--
ps:运算符在操作数之前,c语言在引用操作数之前就先执行加1或减1操作,运算符在操作数之后,c语言就先引用操作数的值,而后再进行加 1或减1操作。
eg:
i=1;
(j=i++; 结果是i=2,j=1)
(j=++i; 结果是i=2,j=2)
(j=i--;结果是i=0,j=1)
(j=--i;结果是i=0,j=0)
2.3赋值中的类型转换
当赋值运算符两边的运算对象类型不同时,发生类型转换,把赋值运算符右边的表达式类型转换为左侧变量的类型。
三、逗号运算符和表达式
变量=表达式1,表达式2
求值过程是求每个表达式的值,变量的结果等于表达式2的结果
扩展:变量=表达式1,表达式2,表达式3…表达式n,结果是表达式n的值
四、位运算符和表达式
4.1位运算符
"&"与运算符,按位相与,两者都为1结果为1
"|"或
"^"异或
"~"取反
"<<"左移(左移n位,右边n位补0)
">>"右移(逻辑移位:右移n位右边n位补0,算术移位:右移n位,左边n位原数值的符号位填充)
4.2位表达式
优先级: ~ (>> <<) (& | ^)
位运算符高效
五、关系运算符和表达式
5.1关系运算符
(都是双目运算符,结合性均为左结合)
">"大于
">="大于等于
"<"小于
"<="小于等于
"=="等于
"!="不等于
5.2表达式
"> >= < <="优先级高于等于和不等于
关系表达式:表达式 关系运算符 表达式
关系表达式的值只有两种,真和假表示为1和0
c语言中不存在bool类型的值,所以用0代表假,1代表真
六、逻辑运算符和表达式
6.1逻辑运算符
&&逻辑与
||逻辑或
!非
6.2逻辑表达式
表达式 逻辑运算符 表达式
七、sizeof操作符
sizeof(<类型或变量名>)
他只针对数据类型不针对变量
若运算对象为变量,则所求结果是这个变量所占用的内存空间的字节数,若运算对象是数据类型,则所求结果是这种数据类型的变量占用的内存空间的字节数。
八、条件运算符
8.1表达式:<表达式1> ? <表达式2> : <表达式3>
先计算表达式1的逻辑,为真就计算表达式2,否则计算表达式3,并以它的结果作为整个表达式的值。
8.2优先级高于赋值运算符
运算符优先级总结
大多数运算符的结合性都是自左向右的,只有单目运算符、条件运算符和赋值运算符是自右向左。