# 阶段0:编程基础预热 —— 进制与编码(预科补遗) > 对应预科知识点:`知识点/00-Java预科-知识点/` > 说明:预科中的**数据类型与运算符**、**流程控制与循环结构**已融入阶段01(Java 语言基础),不再重复。 > 本阶段专门整理预科中**后续阶段(阶段01~07)未覆盖**的独立知识点:**进制与进制转换、ASCII 字母对照表、预科经典算法**。 --- ## 一、进制与进制转换(核心补遗) > 预科文档:`20260710-进制与进制转换.md` > 阶段01~07 均未专门讲解进制,本部分为**必补重点**。 ### 1. 为什么计算机使用二进制 - 计算机由晶体管组成,只有**通电(1)**和**断电(0)**两种状态 - 两种状态最稳定可靠、电路设计最简单 - **计算机使用二进制不是因为二进制高级,只是因为硬件只识别通电/断电** ### 2. 四种进制与 Java 前缀(必背) | 进制 | 基数 | 数字符号 | Java 前缀 | |------|------|---------|-----------| | 二进制 | 2 | 0, 1 | `0b` / `0B` | | 八进制 | 8 | 0~7 | `0` | | 十进制 | 10 | 0~9 | 正常写 | | 十六进制 | 16 | 0~9, A~F | `0x` / `0X` | **十六进制 A~F 对应值:** A=10, B=11, C=12, D=13, E=14, F=15 ### 3. 编码与解码 | 概念 | 方向 | 说明 | |------|------|------| | **编码(Encode)** | 人 → 机器 | 把人类可读信息(文本/数字/图片)转成二进制数据 | | **解码(Decode)** | 机器 → 人 | 编码的逆过程,把二进制转回人类可读信息 | ### 4. 按权展开法(任意进制 → 十进制,必会) **方法:每一位数字 × 位权,再求和。** 二进制位权从右往左:`2⁰, 2¹, 2², 2³...` **示例:** - 二进制 `0b1101` = 1×8 + 1×4 + 0×2 + 1×1 = **13** - 二进制 `0b1001` = 1×8 + 0×4 + 0×2 + 1×1 = **9** - 八进制 `0257` = 2×8² + 5×8¹ + 7×8⁰ = **175** - 十六进制 `0x3F` = 3×16¹ + 15×16⁰ = **63** ### 5. 除基取余法(十进制 → 任意进制,必会) **方法:不断除以目标进制,取余数,从下往上排列余数。** **示例:十进制 25 → 二进制** ``` 25 ÷ 2 = 12 余 1 12 ÷ 2 = 6 余 0 6 ÷ 2 = 3 余 0 3 ÷ 2 = 1 余 1 1 ÷ 2 = 0 余 1 从下往上读:11001 ``` **练习答案(自测):** - 357 → 二进制 `101100101`、八进制 `545`、十六进制 `165` - 1234 → 二进制 `10011010010`、八进制 `2322`、十六进制 `4D2` ### 6. 8进制/16进制 与二进制互转(3 位 / 4 位一组) - **每 3 位二进制 = 1 位八进制**:`001 101 111` → `1 5 7` - **每 4 位二进制 = 1 位十六进制**:`1101 1110 1010 0101` → `D E A 5` **十六进制常见用途:** 颜色色值、内存地址、MAC 地址、文件权限等。 ### 7. Java 代码示例 ```java int a = 0b0101011; // 二进制,前缀 0b int b = 01234567; // 八进制,前缀 0 int c = 0x123AFEC9; // 十六进制,前缀 0x System.out.println(a); // Java 自动转换为十进制输出 ``` ## 二、ASCII 字母对照表(编码基础补遗) > 预科文档:`20260710-ASCII字母对照表.md` > 阶段01 仅在 char 类型处简单提及 ASCII 码值,本部分为**系统整理**。 ### 1. ASCII 编码概念 **ASCII(American Standard Code for Information Interchange)**:美国标准信息交换码,用数字(编码值)表示字符的编码体系。字符在计算机中本质存储为二进制数,ASCII 码表规定了常用字符与整数的对应关系。 ### 2. 常用字符的十进制值(必背) | 字符范围 | 十进制值 | 说明 | |---------|----------|------| | 空格 | **32** | | | 数字 `'0'` ~ `'9'` | **48 ~ 57** | 共 10 个 | | 大写 `'A'` ~ `'Z'` | **65 ~ 90** | 共 26 个 | | 小写 `'a'` ~ `'z'` | **97 ~ 122** | 共 26 个 | | 换行 `\n` (LF) | 10 | | | 回车 `\r` (CR) | 13 | | | 退格 | 8 | | | 制表符 `\t` | 9 | | ### 3. 大小写字母转换技巧(必背) - `'a'` - `'A'` = **32**(0x20) - **小写字母 = 大写字母 + 32** - **大写字母 = 小写字母 - 32** ```java char c2 = 67; // 对应 'C'(67 在 65~90 之间) char c6 = 97; // 对应 'a' System.out.println(c1 >= 'A' && c1 <= 'Z'); // 判断是否大写字母 ``` ### 4. Java 中判断字符类型 ```java // 判断是否为大写字母:字符比较 >= 'A' && <= 'Z'(或 >=65 && <=90) char ch = 'A'; System.out.println(ch >= 'A' && ch <= 'Z'); // true ``` ### 5. 字符与整数在 Java 中的互转(衔接阶段01) ```java char cc = 'A'; int d1 = cc + 6; // 'A' 的 ASCII 码 65 + 6 = 71 System.out.println(d1); // 71 char c6 = 97; // 直接为 char 赋整数值 System.out.println(c6); // 'a'(97 对应 'a') ``` ## 三、预科经典算法(后续阶段未系统覆盖) > 来源:预科 `20260710-进制与进制转换.md` 末尾,阶段01~07 未专门整理,但属基础必会算法。 ### 1. 斐波那契数列(前 10 项) 第 1 项为 0,第 2 项为 1,从第 3 项开始每项 = 前两项之和。 ```java int a = 0, b = 1; for (int i = 3; i <= 10; i++) { int c = a + b; a = b; b = c; // 变量前移 } ``` > 核心技巧:`a = b; b = c;` 前移。 ### 2. 判断素数 大于 1 的自然数,除了 1 和它本身外没有其他因数。 ```java int n = 17; boolean b = n > 1; for (int i = 2; i <= n; i++) { if (n % i == 0) { b = false; break; } } ``` > 核心技巧:`for` + `if` + `break`。 ### 3. 正负交替求和(1 - 1/2 + 1/3 - ...) ```java double sum = 0; for (int i = 1; i <= 10; i++) { if (i % 2 == 1) sum += 1.0 / i; // 奇数项为正 else sum -= 1.0 / i; // 偶数项为负 } System.out.printf("%.2f", sum); ``` > ⚠️ 浮点除法必须用 `1.0 / i`,否则整数除法截断为 0。 ### 4. 判断回文数(正反读一样,如 12321) ```java int n = 12321, a = n, b = 0; while (n > 0) { b = b * 10 + n % 10; // 拼接反转 n /= 10; } System.out.println(a == b ? "yes" : "no"); ``` > 核心技巧:`% 10` 取最后一位,`b = b*10 + 位` 拼接反转。 ### 5. 阶乘求和(1! + 2! + ... + 10!) ```java int sum = 0, f = 1; for (int i = 1; i <= 10; i++) { f *= i; // 计算当前阶乘 sum += f; // 累加 } ``` > 核心技巧:`f *= i` 同时累积阶乘与总和。 ## 本阶段必须背诵的核心口诀 1. **计算机用二进制,只是因为硬件只认通电/断电** 2. **进制前缀**:二进制 `0b`、八进制 `0`、十六进制 `0x` 3. **进制转换两把刀**:按权展开(任意→十进制)、除基取余(十进制→任意) 4. **二进制看 8/16 进制**:3 位一组看 8、4 位一组看 16 5. **ASCII 必背**:空格 32、数字 48、大写 65、小写 97 6. **大小写转换**:小写 = 大写 + 32(即 `'a' - 'A' = 32`) 7. **char 本质是数值**:`'A' + 6 = 71`、`char c = 97;` → 'a' 8. **经典算法**:斐波那契(变量前移)、素数(取余+break)、回文(反转拼接)、阶乘(`f*=i` 累积)