阶段00-编程基础预热-进制与编码.md 6.9 KB

阶段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 代码示例

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

    char c2 = 67;   // 对应 'C'(67 在 65~90 之间)
    char c6 = 97;   // 对应 'a'
    System.out.println(c1 >= 'A' && c1 <= 'Z');  // 判断是否大写字母
    

4. Java 中判断字符类型

// 判断是否为大写字母:字符比较 >= 'A' && <= 'Z'(或 >=65 && <=90)
char ch = 'A';
System.out.println(ch >= 'A' && ch <= 'Z');  // true

5. 字符与整数在 Java 中的互转(衔接阶段01)

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 项开始每项 = 前两项之和。

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 和它本身外没有其他因数。

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 - ...)

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)

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!)

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 累积)