day 09 多文件 位运算
预处理指令
- * 什么叫预处理指令*
- 这一段代码面前 如果有以“#” 开头
* 手写一个C程序的步骤(面试题)*
- 创建文件,写代码
- 编译
- 执行main.c中的预处理指令
- 检查语法
- 编译生成一个.o目标文件
- 链接
- 为 .o文件添加一些启动代码
- 为 .o文件链接上一个必须要的库文件
- 执行 .out 文件
* 预处理指令的分类(面试题)以”#”开头*
- 文件包含指令 #include
- 宏定义 #define
- 条件编译 # if #enfif
- 预处理指令的特点
- 都是以# 开头
- 后面没有分号
- 在编译的时候, 检查语法之前进行
多文件开发
- C语言中的模块:
- 组成:一个.h文件 和一个.c文件组成在一起的就叫做一个模块
- 什么时候需要多文件开发
- 当一个文件中函数过多的时候
- 如何分模块开发?
- 提供两个文件
- .h文件:学函数的声明
- .c文件: 学函数的实现
- 如果想要用某一个模块中的函数
- 直接引入 这个密会的.h文件就可以了
- 提供两个文件
- * 注意*
- 在C语言中 一个模块有 .h和.c文件组成
- 在OC中 一个模块有 .h 和 .m 文件组成
- 创建.h和.c文件快捷键是: command + n
- 可以同时生成一个 .h 和一个 .c 文件
- 写模块
- 把函数的声明写在 .h 文件中
- 吧函数的实现写在 .c 文件中
- 在main函数调用的时候,只需要#include “.h文件”
- 就可以直接调用了
C语言的进制
- C语言中如何写一个不同进制的数据
进制 | 写法 | 解释 | 输出方式 |
---|---|---|---|
二进制 | 以 0b 开头 | 逢二进一 | 无 |
八进制 | 以 0 开头 | 逢八进一 | %o |
十进制 | 编译器默认 | 逢十进一 | %d |
十六进制 | 以 0x 开头 | 逢十六进一 | %x |
* 四个概念
* 数码:
* 数据中每一位的数字
* 数位
* 数码在这个数据中的位置 从右(0开始)到左一次增加
* 基数
* 每一个数码 可以有多种不同的表示,即 进制
* 位权
* 数码 * 基数 的数位次方
进制的转换大总结
进制转换方向 | 转换方法 | 理解 |
---|---|---|
2一>10 | 按位权相加 | 从最后一位数 1-2-4-8类推,是0则跳过1则相加 |
10一>2 | 按位权展开 | 一个整数一直除2 直到得0位置 然后余数逆序输出 |
8一>10 | 按位权展开相加 | 176(8进制): 1 × 8 ^ 2 + 7 × 8 ^1 + 6 × 8^0 = 64 + 56 + 6 = 126(10进制) |
10一>8 | 除8取余 | 除8取余倒叙排列 |
8一>2 | 1拆3 | 将每一个数拆分成三个二进制数 |
2一>8 | 3合1 | 每三个二进制组合成一个8进制 |
16一>2 | 1拆4 | 将每一个数拆分成四个二进制数 |
2一>16 | 4合1 | 每四个二进制组合成一个16进制 |
sizeof运算符的作用?
- 作用:计算当前系统和编译器下 常量,变量在当前系统上内存中所占的字节数
怎么用
- sizeof(数据类型/变量名/常量)
注意:
- sizeof(字符型变量): 1个字节
- sizeof(字符型常量): 4个字节
原码 反码 补码
- 正数的原码反码补码都是一样的
- 负数:
- 原码: 二进制数 最高位是1
- 反码 符号位不变 其他位取反
- 补码 反码+1
按位与运算
1. 只要是按位运算:都需要转成二进制的补码形式进行计算
- 如果对应位都是1 那么结果是1
如果对应位不都是1 那么结果是0
口诀:同1则1,有0则0
按位或运算
只要是按位运算:都需要转成二进制的补码形式进行计算
口诀:有1则1,同0则0
按位取反运算
1. 只要是按位运算:都需要转成二进制的补码形式进行计算
- 口诀:
0变1 1变0
按位异或运算
1. 只要是按位运算:都需要转成二进制的补码形式进行计算
- 口诀:
相同为0 不同为1
交换2个数:
int a = 10;
int b = 20;
方法一:
int temp = a;
a = b;
b = temp;
方法二:
a = a+b;//a = 30 b = 20
b = a-b;//a = 30,b = 10
a = a-b;//a = 20,b = 10
方法三:
a = a ^ b;
b = a ^ b;
a = a ^ b;
按位左移或右移
1. 只要是按位运算:都需要转成二进制的补码形式进行计算
按位左移:
- 口诀:高位溢出舍弃,低位补0
- 8<<2: 相当于 8 * (2的2次方)
按位右移:
- 口诀:低位溢出舍弃,高位补符号位
- 16 >> 3:相当于 16 / (2的三次方)
- 150 >>2: 相当于150 / (2的2次方)