c++基础知识易忘易混 —— 6_函数、位运算和运算符 【复习笔记】

1. 传引用调用

引用特性:1.引用在定义时必须初始化  2.一个变量可以有多个引用  3.同一个引用不能给多个变量

传引用调用不会拷贝实参,效率更高

2. 函数重载

指在同一个作用域中可以有多个同名函数,函数名称相同,参数列表不同

参数列表不同:参数的数量、类型或顺序至少有一个不同。函数返回类型不影响函数重载

3. 10进制转2进制

1.用要转换的10进制数除以2,得到商和余数

2.再将商除以2,又得到一个商和余数

3.重复上述步骤,直到商为0为止

4.最后将每次得到的余数从下往上排列,就是对应的2进制数

例如,将10进制数25转换为2进制数:

25/2=12......1

12/2=6......0

6/2=3......0

3/2=1......1

1/2=0......1

得到的2进制数为11001

4. 2进制转8进制/16进制

1.  8进制数字每一位是0~7的数字,转换为2进制位最多有3个

2进制转8进制数时,从2进制序列右边低位开始,每3个2进制位换算成一个8进制位,剩余不够3个2进制位的直接换算

例如,2进制的01101011换算成8进制:0153(0开头的数字为8进制)

2.  16进制数字每一位是0~9,a~f的数字,转换为2进制位最多有4个

2进制转16进制数时,从2进制序列右边低位开始,每4个2进制位换算成一个16进制位,剩余不够4个2进制位的直接换算

例如,2进制的01101011换算成16进制:0x6b(0x开头的数字为16进制)

5. 位运算的应用

5.1 判断奇数和偶数

所以偶数的2进制表示,最低位一定是0;所以奇数的2进制表示,最低位一定是1

将一个数和1进行按位与运算,可以判断这个数的奇偶

5.2 保留2进制位中的指定位

背景:需要将一个数2进制中取出某一位或几位,让取出的位置上保留原来的值,其他位置为0

方法:使用一个值a,让a的二进制中对应位为1,其他位为0.再让这两个数按位与即可

适用场景:

权限管理中,系统通常用一个整数的不同2进制位表示不同的权限,如:

0位:读权限,1表示有读权限,0表示没有读权限

1位:写权限,1表示有写权限,0表示没有写权限

2位:执行权限,1表示有写权限,0表示没有写权限

0 0 0 0 0 1 1 1
执行

我们可以通过保留指定位,来检查某个权限是否被设置

5.3 获取2进制位中的指定位

背景:需要获取一个数2进制位中第 i 位(从右到左,从低到高,最低位为0位)

方法:对该数a进行:(a >> i)&1,结果为0,表示 i 位为0;结果为1,表示 i 位为1

适用场景:

在嵌入式系统,某些寄存器包含多个信息字段,这些字段往往在寄存器的特定位中,需要获取指定位来读取

5.4 将指定2进制位设置为1/0

背景:需要将一个数二进制表示中某一位或几位设置为1/0,其余位保留原值

设置为1:用一个数a,让a对应2进制位上为1,其余位为0,然后进行按位或运算

设置为0,用一个数a,让a对应2进制为上为1,,其余位为0对a取反,再进行按位与运算

适用场景:

嵌入式系统,我们要控制某个开关,某个寄存器的第3位用于控制这个开关,可以通过设置1/0来控制这个开关

5.5 反转指定2进制位

背景:需要将一个数二进制表示中第 i 位反转(1->0,0->1)

方法:用一个数a,让a的二进制中第 i 位为1,其余位为0,然后进行按位异或运算

适用场景:

嵌入式系统,我们要控制某个开关,某个寄存器的第3位用于控制这个开关,可以通过反转2进制位来控制这个开关

5.6 将2进制中最右边的1变为0(简单方法)

背景:需要将一个数2进制表示中最右边的1变为0

方法:将a最右边的1变为0,只需a&(a-1)

适用场景:

求一个数2进制表示中有几个1,因为每一次a=a&(a-1),让a最右边1置为0,只要进行循环,就可以得到1的个数

位图算法,Brian Kernighan算法

5.7 保留2进制中最右边的1

背景:将一个整数的2进制表示中最右边的1保留,其他位置为0

方法:以a为例,a=a&(-a)

适用场景:位图算法

5.8 异或运算符的特点

1. a^a=0

2.0^a=a

3.a^b^a==a^a^b

6. 运算符的优先级

1.圆括号()

2.自增/自减运算符 ++,--

3.单目运算符 +,-

4. 乘除法 *,/

5.加减法+,-

6.关系运算符 <,>

7.按位:&,|

8.逻辑:&&,||

9.赋值运算符 ==

优先级参考:https://zh.cppreference.com/w/c/language/operator_precedence

你可能感兴趣的:(复习笔记,笔记,c++,c语言)