一、运算符
1.1 简介
运算符分类:算数运算符、赋值运算符、比较运算符、逻辑运算符、位运算符、sizeof运算符
目:表示运算符所连接的操作个数(三目:exp1?exp2:exp3 )
自动转换:又称为隐式转换,运算数据的数据类型会随着操作数的数据类型自定发生该变,一般发生在双目运算符之间,当双目运算符运算的数据类型不一致时,就会发生自动转换
遵循原则:低精度→高精度,小量程→大量程
强制转换: 格式:(待转换数据类型)变量 示例:int a = 10; (float)a = 10.0;
|---------|--------------------|-----------|------------------|----------|--------|
| 优先级 | 运算符 | 名称或含义 | 使用形式 | 结合方向 | 说明 |
| 1 | [ ] | 数组下标 | 数组名[常量表达式] | 左到右 | -- |
| 1 | () | 圆括号 | (表达式)/函数名(形参表) | 左到右 | -- |
| 1 | . | 成员选择(对象) | 对象.成员名 | 左到右 | -- |
| 1 | -> | 成员选择(指针) | 对象指针->成员名 | 左到右 | -- |
| 2 | - | 负号运算符 | -表达式 | 右到左 | 单目运算符 |
| 2 | ~ | 按位取反运算符 | ~表达式 | 右到左 | 单目运算符 |
| 2 | ++ | 自增运算符 | ++变量名/变量名++ | 右到左 | 单目运算符 |
| 2 | -- | 自减运算符 | --变量名/变量名-- | 右到左 | 单目运算符 |
| 2 | * | 取值运算符 | *指针变量 | 右到左 | 单目运算符 |
| 2 | & | 取地址运算符 | &变量名 | 右到左 | 单目运算符 |
| 2 | ! | 逻辑非运算符 | !表达式 | 右到左 | 单目运算符 |
| 2 | ( 类型 ) | 强制类型转换 | (数据类型)表达式 | 右到左 | -- |
| 2 | sizeof | 长度运算符 | sizeof(表达式) | 右到左 | -- |
| 3 | / | 除 | 表达式/表达式 | 左到右 | 双目运算符 |
| 3 | * | 乘 | 表达式*表达式 | 左到右 | 双目运算符 |
| 3 | % | 余数(取模) | 整型表达式%整型表达式 | 左到右 | 双目运算符 |
| 4 | + | 加 | 表达式+表达式 | 左到右 | 双目运算符 |
| 4 | - | 减 | 表达式-表达式 | 左到右 | 双目运算符 |
| 5 | << | 左移 | 变量<<表达式 | 左到右 | 双目运算符 |
| 5 | >> | 右移 | 变量>>表达式 | 左到右 | 双目运算符 |
| 6 | > | 大于 | 表达式>表达式 | 左到右 | 双目运算符 |
| 6 | >= | 大于等于 | 表达式>=表达式 | 左到右 | 双目运算符 |
| 6 | < | 小于 | 表达式<表达式 | 左到右 | 双目运算符 |
| 6 | <= | 小于等于 | 表达式<=表达式 | 左到右 | 双目运算符 |
| 7 | == | 等于 | 表达式==表达式 | 左到右 | 双目运算符 |
| 7 | != | 不等于 | 表达式!= 表达式 | 左到右 | 双目运算符 |
| 8 | & | 按位与 | 表达式&表达式 | 左到右 | 双目运算符 |
| 9 | ^ | 按位异或 | 表达式^表达式 | 左到右 | 双目运算符 |
| 10 | | | 按位或 | 表达式|表达式 | 左到右 | 双目运算符 |
| 11 | && | 逻辑与 | 表达式&&表达式 | 左到右 | 双目运算符 |
| 12 | || | 逻辑或 | 表达式||表达式 | 左到右 | 双目运算符 |
| 13 | ?: | 条件运算符 | 表达式1? 表达式2: 表达式3 | 右到左 | 三目运算符 |
| 14 | = | 赋值运算符 | 变量=表达式 | 右到左 | -- |
| 14 | /= | 除后赋值 | 变量/=表达式 | 右到左 | -- |
| 14 | *= | 乘后赋值 | 变量*=表达式 | 右到左 | -- |
| 14 | %= | 取模后赋值 | 变量%=表达式 | 右到左 | -- |
| 14 | += | 加后赋值 | 变量+=表达式 | 右到左 | -- |
| 14 | -= | 减后赋值 | 变量-=表达式 | 右到左 | -- |
| 14 | <<= | 左移后赋值 | 变量<<=表达式 | 右到左 | -- |
| 14 | >>= | 右移后赋值 | 变量>>=表达式 | 右到左 | -- |
| 14 | &= | 按位与后赋值 | 变量&=表达式 | 右到左 | -- |
| 14 | ^= | 按位异或后赋值 | 变量^=表达式 | 右到左 | -- |
| 14 | |= | 按位或后赋值 | 变量|=表达式 | 右到左 | -- |
| 15 | , | 逗号运算符 | 表达式,表达式,... | 左到右 | -- |
1.2 注意事项
取余运算中,两个操作数必须为整数
a++:后自增,先进行其他处理,在进行自增操作
++a:前自增,先进行自增操作,在进行其他处理
a--:后自减,先进行其他处理,在进行自减操作
--a:前自减,先进行自减操作,在进行其他处理
C语言比较运算符中,真用数字1表示,假用数字0表示;
逻辑运算符中表达式的结果判断,一般默认非0即真
逻辑与&&:如果表达式1为假,则不会执行表达式2
逻辑或||:如果表达式1为真,则不会执行表达式2
1.3 位运算
所有的位运算操作,都是操作二进制数据的补码
左移:实际是将原来数据乘2^n
右移:是将数据除以2^n(偶数右移:正负数移动后,绝对值一致。奇数右移:正数,把小数位舍去,负数,小数位进一)
二、结构化编程
2.1 if-else与switch-case的根本区别
if-else:遍历分支条件,直到条件为真,如果没有分支条件为真,则执行else语句中的代码,或直接结束
switch-case:跳转分支语句,当前语句会生成一个跳转表,用来指示实际的case分支地址,而且switch-case的执行效率要高于if-else
2.2 do-while与while的区别
while循环是先判断在执行,存在"循环体一次都不执行"的情况
do-while先执行在判断,存在"循环体至少执行一次"的情况
2.3 控制语句
break语句 :
作用:结束包含本次break的最近一次循环或者switch-case结构;
特点:只能跳出当前一层循环
continue语句 :
作用:只能用于循环结构,当执行到continue时,视为本次循环结束(该循环执行多次),之后执行后续循环
特点:结束本次循环,继续下次循环
return语句:
作用:1.结束当前函数 2.返回一个值给调用该函数的函数
goto语句:
作用:当程序执行到goto标签时;程序会跳转到标签所指定的位置开始执行
三、四种变量数据交换
3.1 中间变量辅助
temp=a;
a=b;
b=temp;
3.2 和差法
a=a+b;
b=a-b;
a=a-b;
3.3 乘除法
a=a*b;
b=a/b;
a=a/b;
3.4 异或法
a=a^b;
b=a^b;
a=a^b;