(编写中)数组到链表
enum
typedef
static
extern
auto 和 register
- auto 关键字(忘记)
- 只能修饰局部变量, 局部变量如果没有其它修饰符, 默认就是 auto 的
- 特点: 随用随开, 用完即销
auto int num; // 等价于 int num;
- register 关键字(忘记)
- 只能修饰局部变量, 原则上将内存中变量提升到 CPU 寄存器中存储, 这样访问速度会更快
- 但是由于 CPU 寄存器数量相当有限, 通常不同平台和编译器在优化阶段会自动转换为 auto
register int num;
数组
二维数组
指针
结构体
链表
结构体是链表的基本组成单位,链表是由结构体连接而成的数据结构。
进制转换
10 进制转 2 进制
- 除 2 取余, 余数倒序; 得到的序列就是二进制表示形式
- 例如: 将十进制(97) 10 转换为二进制数
2 进制转 10 进制
- 每一位二进制进制位的值 * 2 的当前索引次幂; 再将所有位求出的值相加
- 例如: 将二进制 01100100 转换为十进制
01100100
索引从右至左, 从零开始
第0位: 0 * 2^0 = 0;
第1位: 0 * 2^1 = 0;
第2位: 1 * 2^2 = 4;
第3位: 0 * 2^3 = 0;
第4位: 0 * 2^4 = 0;
第5位: 1 * 2^5 = 32;
第6位: 1 * 2^6 = 64;
第7位: 0 * 2^7 = 0;
最终结果为: 0 + 0 + 4 + 0 + 0 + 32 + 64 + 0 = 100
2 进制转 8 进制
- 三个二进制位代表一个八进制位, 因为 3 个二进制位的最大值是 7,而八进制是逢 8 进 1
- 例如: 将二进制 01100100 转换为八进制数
从右至左每3位划分为8进制的1位, 不够前面补0
001 100 100
第0位: 100 等于十进制 4
第1位: 100 等于十进制 4
第2位: 001 等于十进制 1
最终结果: 144就是转换为8进制的值
2 进制转 16 进制
- 四个二进制位代表一个十六进制位,因为 4 个二进制位的最大值是 15, 而十六进制是逢 16 进 1
- 例如: 将二进制 01100100 转换为十六进制数
从右至左每4位划分为16进制的1位, 不够前面补0
0110 0100
第0位: 0100 等于十进制 4
第1位: 0110 等于十进制 6
最终结果: 64就是转换为16进制的值
其它进制转换为十进制
- 系数 * 基数 ^ 索引 之和
十进制 --> 十进制
12345 = 10000 + 2000 + 300 + 40 + 5
= (1 * 10 ^ 4) + (2 * 10 ^ 3) + (3 * 10 ^ 2) + (4 * 10 ^ 1) + (5 * 10 ^ 0)
= (1 * 10000) + (2 + 1000) + (3 * 100) + (4 * 10) + (5 * 1)
= 10000 + 2000 + 300 + 40 + 5
= 12345
规律:
其它进制转换为十进制的结果 = 系数 * 基数 ^ 索引 之和
系数: 每一位的值就是一个系数
基数: 从x进制转换到十进制, 那么x就是基数
索引: 从最低位以0开始, 递增的数
二进制 --> 十进制
543210
101101 = (1 * 2 ^ 5) + (0 * 2 ^ 4) + (1 * 2 ^ 3) + (1 * 2 ^ 2) + (0 * 2 ^ 1) + (1 * 2 ^ 0)
= 32 + 0 + 8 + 4 + 0 + 1
= 45
八进制 --> 十进制
016 = (0 * 8 ^ 2) + (1 * 8 ^ 1) + (6 * 8 ^ 0)
= 0 + 8 + 6
= 14
十六进制 --> 十进制
0x11f = (1 * 16 ^ 2) + (1 * 16 ^ 1) + (15 * 16 ^ 0)
= 256 + 16 + 15
= 287
十进制快速转换为其它进制
- 十进制除以
基数
取余, 倒叙读取
十进制 --> 二进制
100 --> 1100100
100 / 2 = 50 0
50 / 2 = 25 0
25 / 2 = 12 1
12 / 2 = 6 0
6 / 2 = 3 0
3 / 2 = 1 1
1 / 2 = 0 1
十进制 --> 八进制
100 --> 144
100 / 8 = 12 4
12 / 8 = 1 4
1 / 8 = 0 1
十进制 --> 十六进制
100 --> 64
100 / 16 = 6 4
6 / 16 = 0 6