)
运算符包括算术运算符、关系运算符、逻辑运算符、赋值运算符、逗号运算符等一、运算符分类1. 算术运算符符号 - * / % --加减乘除取余自增自减其中 - * / %为双目运算符两个操作数 --为单目运算符一个操作数对于整型除法直接舍去小数只保留整数对于浮点除法保留小数%取余求模只能用于整型char/short/int/long不能用于 float/double其运算结果符号与左操作数保持一致、--自增自减可分为前置与后置两种前置num--num先1-1后再使用值后置numnum--先使用原值运算结束后再1-1注意自增自减只能作用于变量不能作用于常量 / 表达式2.赋值运算符符号 - * / %均为双目运算符对于赋值运算符其左值必须是可修改变量不能是常量、表达式、数组名复合赋值等价展开例如num 10等价于num num 10num % 3等价于num num % 3链式赋值自右向左结合例如a b c 5;等价 c5; bc; ab;3. 关系运算符符号 !均为双目运算符关系运算符的结果为逻辑结果即1真0假需注意连续比较不能简写例如6 j -2其等价于等(-6j) 结果0/1 再与-2比较4.逻辑运算符符号 || !逻辑与逻辑或逻辑非逻辑与双目全真才为真一假则假左右同时为真时结果为真左右有一个为假结果即为假短路当左边为假时右边完全不执行||逻辑或双目一真即为真全假才假左右有一个为真结果即为真左右同时为假时结果为假短路当左边为真时右边完全不执行!逻辑非单目取反非 0 变 00 变 15.三目运算符符号 ? :唯一三目运算符语法条件表达式?表达式1:表达式2逻辑条件为真执行表达式 1条件为假执行表达式 2结合性自右向左整体是一个表达式有返回值6.逗号运算符符号,优先级全运算符最低规则从左往右依次执行所有表达式最终结果为最后一个表达式的值例如num 23, 4*5, 6-4;等价于(num5), 20, 2; num5用途for 循环多变量初始化 / 步进7. sizeof 运算符功能用于计算数据 / 变量 / 类型在内存占用字节数其返回值为unsigned long例如sizeof(int)或sizeof(num)64 位系统下所有指针sizeof(指针) 8字节数组名单独放入 sizeof代表整个数组总字节数组作为函数形参时退化为指针sizeof 仅为 8二、运算符优先级层级运算符类型符号结合方向1括号()左2单目运算符! ~ -- * sizeof右3算术乘除取余* / %左4算术加减 -左5移位 左6关系大小比较 左7相等判断 !左8按位与左9按位异或^左10按位或左11逻辑与左12逻辑或左13三目运算符? :右14赋值运算符 - * / %右15逗号运算符,左三、类型转换C 语言运算时不同数据类型会自动 / 强制转换分为隐式自动转换、显式强制转换两大类1. 隐式类型转换隐式类型转换系统自动转换无需手动写代码运算时编译器自动将低精度 / 小范围类型转为高精度 / 大范围保证运算精度不丢失精度优先级从低→高整型char/short→int→long→unsigned long浮点float→doublefloat 参与运算一定会提升为 double无符号 同长度有符号如 unsigned int 高于 int整体层级char/short int long float double强制转换规则char、short只要参与算术运算、比较运算无条件先转 int浮点与整型混合运算整型转浮点有符号与无符号同长度运算有符号转为无符号极易出现负数变超大正数 bug赋值转换特殊隐式转换 等号右边类型自动适配左边变量类型会发生截断 / 补位浮点赋值给整型直接舍弃小数只保留整数大数据存入小类型高位截断只保留低位字节小数据存入大类型正数高位补 0负数高位补符号位 12. 显式强制类型转换手动转换格式(目标类型)表达式语法(类型)数据;或(类型)(表达式);使用复杂表达式建议加括号特性1仅临时转换本次运算的值不会改变原变量本身存储内容2高精度强制转低精度精度丢失、数值截断、符号错乱3无符号、有符号互相强制转换直接拷贝内存二进制补码原样保留