第三章 运算符和条件结构
运算符与表达式
运算符
- 赋值运算符、算术运算符、关系运算符、逻辑运算符
表达式
符号与操作数的组合
a = (b + 3) + (b - 1)
赋值运算符
单等号 =
计算顺序:从右往左
double salary = 3200.0;
double total = salary * 2;
char sex = ‘F’;
int score = 98;
1 | int main() |
算数运算符
- 算数运算符可以进行算术运算
- 一元运算符:++、–
- 二元运算符:+、-、*、/、%
1 | //定义两个整型变量 |
关系运算符
- 关系运算符可以比较大小、高低、长短
- >、<
- >=、<=
- ==、!=
1 | printf("5 > 8吗? %d\n",5 > 8); //输出结果为:5 > 8吗? 0 |
逻辑运算符
运算符 | 表达式 | 说明 |
---|---|---|
&& 并且 | 条件1 && 条件2 | 两个条件同时为真时,结果为真 |
|| 或 | 条件1 || 条件2 | 两个条件有一个为真时,结果为真 |
! | ! 条件 | 条件为真时,结果为假;条件为假时,结果为真。 |
位运算符
运算符 | 作用 | 示例 |
---|---|---|
& | 按位与 | 两个操作数同时为1结果为1 |
| | 按位或 | 两个操作数只要有一个为1,结果为1 |
~ | 按位非 | 操作数为1,结果为0;操作数为0,结果为1 |
^ | 按位异或 | 两个操作数相同,结果为0;不相同结果为1 |
<< | 左移 | 右侧空位补0 |
>> | 右移 | 左侧空位补符号位 |
>>> | 无符号右移 | 左侧空位补零 |
sizeof运算符
- 使用sizeof运算符可以获得数据类型占用内存空间的大小
- 基本用法:sizeof(type name);
- 结果以字节为单位
1 | int main() |
运算符优先级
运算符 | |
---|---|
第一级 | ()、sizeof、++、– |
第二集 | ! |
第三级 | 算术运算符 |
第四级 | 关系运算符 |
第五级 | && |
第六级 | || |
第七级 | 赋值运算符 |
- 单目运算符包括!、~、++、–、sizeof,优先级别高
- 优先级别最低的是赋值运算符
- 可以通过()控制表达式的运算顺序,()优先级最高
- 从右向左结合性的只有赋值运算符、三目运算符和单目运算符
- 算术运算符 > 关系运算符 > 逻辑运算符
条件结构
if结构
先判断后执行
if( 条件为真 ){ / * *代码块1 * */ } else{ / * *代码块2 * */ }
多重if结构
- if( 条件1 ){ / * *代码块1 * */ } else if( 条件2 ){ / * *代码块2 * */ } else { / * *代码块3 * */ }
1 | int main() |
switch结构
- switch(表达式){ case 常量1:语句1;break; case 常量2:语句2;break;…… default:语句;}
- 使用switch结构时的注意点
- switch后的表达式只能是整型或字符型
- case后常量表达式的值不能相同
- case后允许多条语句,不需要大括号
- 如果不添加break语句,需要特别注意执行顺序
- case和default子句的先后顺序可以自行变动
- default子句可以省略
switch和多重if对比
相同点
- 都是用来处理多分支条件的结构
不同点
- switch:等值条件判断—条件是有限个的时候(杀鸡刀)
- 多重if:判断某个连续区间时的情况(杀牛刀)