1. 进制系统
1.1 进制表示
| 进制 | 基数 | 前缀 | 示例 |
|---|---|---|---|
| 二进制 | 2 | 0b | 0b101 |
| 八进制 | 8 | 0 | 061 |
| 十进制 | 10 | 无 | 123 |
| 十六进制 | 16 | 0x | 0x45 |
- 进制转换:
- 十进制 → 二进制:
- 整数:除2取余,逆序排列。
- 小数:乘2取整,顺序排列。
plaintext例:13.6 → 1101.1001... 整数部分:13 ÷ 2 = 余1 → 1101(逆序) 小数部分:0.6 × 2 = 取整1 → 0.1001(顺序) - 二进制 → 十进制:
- 公式:每位值 × 2位置索引(索引从0开始)
plaintext例:1100.001 → 12.125 整数:1×2³ + 1×2² + 0×2¹ + 0×2⁰ = 12 小数:0×2⁻¹ + 0×2⁻² + 1×2⁻³ = 0.125
- 十进制 → 二进制:
1.2 存储单位
| 单位 | 换算关系 |
|---|---|
| 位 (bit) | 最小单位(0/1) |
| 字节 (B) | 1 B = 8 bit |
| 千字节 (KB) | 1 KB = 1024 B |
| 兆字节 (MB) | 1 MB = 1024 KB |
1.3 原码/反码/补码
- 正数:三码相同(
12 → 0000...1100)。 - 负数(以
-12为例):plaintext原码:1000...1100(符号位1,其余为绝对值) 反码:1111...0011(符号位不变,其余取反) 补码:1111...0100(反码 + 1)→ 计算机存储格式 - 补码意义:统一加减法运算(减法转为加法):plaintext
1 - 1 = 1 + (-1) → 0000...0001(1补码) + 1111...1111(-1补码) = 0000...0000(结果0)
1.4 有符号与无符号数
- 区别:最高位是否作为符号位。cpp
unsigned int a = 0b1000...0010; // 无符号(正数) int b = 0b1000...0010; // 有符号(负数补码) - 输出差异:cpp
printf("%u", a); // 输出无符号值 printf("%d", b); // 输出有符号值(可能为负数)
附:C++关键字表(部分)
| 关键字 | 关键字 | 关键字 |
|---|---|---|
int | float | return |
const | namespace | static_cast |
bool | using | dynamic_cast |
