对应预科知识点:
知识点/00-Java预科-知识点/说明:预科中的数据类型与运算符、流程控制与循环结构已融入阶段01(Java 语言基础),不再重复。 本阶段专门整理预科中后续阶段(阶段01~07)未覆盖的独立知识点:进制与进制转换、ASCII 字母对照表、预科经典算法。
预科文档:
20260710-进制与进制转换.md阶段01~07 均未专门讲解进制,本部分为必补重点。
| 进制 | 基数 | 数字符号 | 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
| 概念 | 方向 | 说明 |
|---|---|---|
| 编码(Encode) | 人 → 机器 | 把人类可读信息(文本/数字/图片)转成二进制数据 |
| 解码(Decode) | 机器 → 人 | 编码的逆过程,把二进制转回人类可读信息 |
方法:每一位数字 × 位权,再求和。 二进制位权从右往左:2⁰, 2¹, 2², 2³...
示例:
0b1101 = 1×8 + 1×4 + 0×2 + 1×1 = 130b1001 = 1×8 + 0×4 + 0×2 + 1×1 = 90257 = 2×8² + 5×8¹ + 7×8⁰ = 1750x3F = 3×16¹ + 15×16⁰ = 63方法:不断除以目标进制,取余数,从下往上排列余数。
示例:十进制 25 → 二进制
25 ÷ 2 = 12 余 1
12 ÷ 2 = 6 余 0
6 ÷ 2 = 3 余 0
3 ÷ 2 = 1 余 1
1 ÷ 2 = 0 余 1
从下往上读:11001
练习答案(自测):
101100101、八进制 545、十六进制 16510011010010、八进制 2322、十六进制 4D2001 101 111 → 1 5 71101 1110 1010 0101 → D E A 5十六进制常见用途: 颜色色值、内存地址、MAC 地址、文件权限等。
int a = 0b0101011; // 二进制,前缀 0b
int b = 01234567; // 八进制,前缀 0
int c = 0x123AFEC9; // 十六进制,前缀 0x
System.out.println(a); // Java 自动转换为十进制输出
预科文档:
20260710-ASCII字母对照表.md阶段01 仅在 char 类型处简单提及 ASCII 码值,本部分为系统整理。
ASCII(American Standard Code for Information Interchange):美国标准信息交换码,用数字(编码值)表示字符的编码体系。字符在计算机中本质存储为二进制数,ASCII 码表规定了常用字符与整数的对应关系。
| 字符范围 | 十进制值 | 说明 |
|---|---|---|
| 空格 | 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 |
'a' - 'A' = 32(0x20)大写字母 = 小写字母 - 32
char c2 = 67; // 对应 'C'(67 在 65~90 之间)
char c6 = 97; // 对应 'a'
System.out.println(c1 >= 'A' && c1 <= 'Z'); // 判断是否大写字母
// 判断是否为大写字母:字符比较 >= 'A' && <= 'Z'(或 >=65 && <=90)
char ch = 'A';
System.out.println(ch >= 'A' && ch <= 'Z'); // true
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 项为 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;前移。
大于 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。
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。
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 + 位拼接反转。
int sum = 0, f = 1;
for (int i = 1; i <= 10; i++) {
f *= i; // 计算当前阶乘
sum += f; // 累加
}
核心技巧:
f *= i同时累积阶乘与总和。
0b、八进制 0、十六进制 0x'a' - 'A' = 32)'A' + 6 = 71、char c = 97; → 'a'f*=i 累积)