前言
话不多说,我们接着上期继续学习!
基础语法
运算符
取反运算(~)
按位取反运算:补码取反,再将取反后的补码转为原码;
ps:无符号的数据,取反后最高位为1,也不需要逆运算。
具体代码以及分析如下:
左移运算符(<<)
将数字的二进制补码全部向左移动,空出来的位置补0,超出范围的二进制数丢弃;
注意:我们在此进行一个字节的演示,即int8_t 如果用int进行演示,int是4个字节,在演示过程中会出现数据溢出不知去向的问题,会带来很多麻烦。
特殊的点:
1. 如果是无符号数【正数】,在发生左移之后,最高位是1,也不需要进行逆运算。
2. 如果是有符号数【负数】,在发生左移之后,最高位是1,则需要逆运算。
3. 如果左移之后,得到 1000 0000 也不需要逆运算回来,这个就是特殊的二进制排列组合: -128
代码以及解释示例:
右移运算符(>>)
将数字的二进制补码全部向右移动,空出来的位置补0,超出范围的二进制数丢弃;
代码以及解释示例:
此处-20要注意的是,写出-20的原码我们要对它的补码进行位移,当符号位是1的时候,右移后左边要用1补充后在进行逆运算得到最终结果。
案例
学习了左移右移运算符,我们这里进行简单的实战,对所学知识进行加深巩固。
案例一代码以及分析(位移后与原来值或运算)
同理我们来看一下案例二
案例三代码以及分析(位移后取反与原来值与运算)
由案例三我们来看一下案例四
案例五(位移后与原来值异或运算)
案例六
案例七(判断某一位是否为0为1)
运算优先级
不同的运算符默认下具备不同的优先级,我们现用现查就可以,这里做个简单介绍,小伙伴们了解一下即可。
类型转换
数据有不同的类型,不同类型数据之间进行混合运算时涉及到类型的转换问题。
- 转换的方法有两种:
-
- 自动转换(隐式转换):遵循一定的规则,由编译系统自动完成
- 强制类型转换:把表达式的运算结果强制转换成所需的数据类型
-
-
- 语法格式: (类型)变量或常量
-
- 类型转换的原则:
-
- 占用内存字节数少(值域小)的类型,向占用内存字节数多(值域大)的类型转换,以保证精度不降低。
代码以及解释示例
控制语句
程序执行的三大流程
- 顺序 : 从上向下, 顺序执行代码
- 分支 : 根据条件判断, 决定执行代码的分支
- 循环 : 让特定代码重复的执行
分支语句
if语句
语法格式:
案例
案例需求
- 定义一个整数变量记录年龄
- 判断是否满 18 岁 (>=)
- 如果满 18 岁,允许进网吧嗨皮
if...else语句
语法格式:
案例需求
- 定义一个整数变量记录年龄
- 判断是否满 18 岁 (>=)
- 如果满 18 岁,允许进网吧嗨皮
- 否则,提示回家写作业
三元(目)运算符
运算符: ?:
术语: 三元(目)运算符
示例: a>b?a:b
结果:如果a>b,整体结果为a,否则,整体结果为b
if...else if...else语句
语法格式:
案例
案例需求:
- 天猫超市双 11 推出以下优惠促销活动:
-
- 购物满 50 元,打 9 折;
-
- 购物满 100 元,打 8 折;
- 购物满 200 元,打 7 折;
- 购物满 300 元,打 6 折;
中间代码原始代码如下:
switch语句
- 测试一个表达式是否等于一些可能的值,并根据表达式的值执行相应的代码块,可以使用switch语言实现
语法格式
案例
案例需求
- 输入int类型的数据,根据结果输出不同的内容
-
- 输入1:输出Monday
- 输入2:输出Tuesday
- 输入3:输出Wednesday
- 输入4:输出Thursday
- 输入5:输出Friday
- 输入6:输出Saturday
- 输入7:输出Sunday
- 输入其它:输出error
当然头文件此处没有展示,但是是一定有的。对于switch有一些特征如下:
循环语句
while语句
语法格式
案例
do...while语句
语法格式
案例
for语句
语法格式
案例
死循环
- 条件永远为真的循环就是死循环
案例
循环案例
跳转关键字
break
- 循环的break说明
- 某一条件满足时,不再执行循环体中后续重复的代码,并退出循环
continue
- 某一条件满足时,不再执行本次循环体中后续重复的代码,但进入下一次循环判断
- while循环,continue 之前一定要修改计数器(条件变量),否则,导致死循环
goto
- goto用于无条件跳转
- 在一种情况下可以使用goto语句:从一组嵌套的循环中跳出
- goto语句可以导致代码不易理解和维护,并且容易引入不必要的错误。因此,除非必要,最好不要使用goto语句
总结
今天的学习就到这里啦,下期再见!