|
|
@@ -26,10 +26,8 @@
|
|
|
|
|
|
**十六进制 A~F 对应值**:A=10, B=11, C=12, D=13, E=14, F=15
|
|
|
|
|
|
-### 编码与解码
|
|
|
-
|
|
|
-- **编码**:将人能看懂的信息(十进制数、文本、图片等)转换为二进制数据
|
|
|
-- **解码**:编码的逆过程,将二进制数据转换回人能看懂的信息
|
|
|
+**编码**:把人能看懂的信息(十进制数、文本、图片等)转换为二进制数据的过程。
|
|
|
+**解码**:编码的逆过程,把二进制数据转换回人能看懂的信息。
|
|
|
|
|
|
---
|
|
|
|
|
|
@@ -46,8 +44,6 @@
|
|
|
|
|
|
结果:`1×8 + 1×4 + 0×2 + 1×1 = 13`(十进制)
|
|
|
|
|
|
-**示例**:`1010` → `1×8 + 0×4 + 1×2 + 0×1 = 10`
|
|
|
-
|
|
|
---
|
|
|
|
|
|
## 四、八进制 → 二进制 与 十六进制 → 二进制
|
|
|
@@ -96,35 +92,11 @@
|
|
|
0x3F → 3×16¹ + 15×16⁰ = 48 + 15 = 63
|
|
|
```
|
|
|
|
|
|
----
|
|
|
-
|
|
|
-## 六、Java 代码示例
|
|
|
-
|
|
|
-```java
|
|
|
-int a = 0b0101011; // 二进制,加前缀 0b
|
|
|
-int b = 01234567; // 八进制,加前缀 0
|
|
|
-int c = 0x123AFEC9; // 十六进制,加前缀 0x
|
|
|
-
|
|
|
-System.out.println(a); // Java 自动转换为十进制输出
|
|
|
-System.out.println(b);
|
|
|
-System.out.println(c);
|
|
|
-```
|
|
|
-
|
|
|
----
|
|
|
-
|
|
|
-## 七、知识总结
|
|
|
-
|
|
|
-| 知识点 | 要点 |
|
|
|
-|-------|------|
|
|
|
-| 二进制 | `0b` 前缀,基数 2,符号 0/1 |
|
|
|
-| 八进制 | `0` 前缀,基数 8,3位二进制对应1位八进制 |
|
|
|
-| 十六进制 | `0x` 前缀,基数 16,4位二进制对应1位十六进制 |
|
|
|
-| 按权展开法 | 每位数字 × 位权,再求和 → 得到十进制 |
|
|
|
-| 编码/解码 | 人→机器(编码),机器→人(解码) |
|
|
|
+> 对应授课代码:`Demo02.java` — 按权展开法示例
|
|
|
|
|
|
---
|
|
|
|
|
|
-## 八、十进制 → 任意进制(除基取余法)
|
|
|
+## 六、十进制 → 任意进制(除基取余法)
|
|
|
|
|
|
**方法**:不断除以目标进制,取余数,**从下往上**排列余数。
|
|
|
|
|
|
@@ -168,28 +140,52 @@ System.out.println(c);
|
|
|
|
|
|
> 结果:十进制数 255 = 十六进制数 FF
|
|
|
|
|
|
+> 对应授课代码:`Demo03.java` — 除基取余法示例
|
|
|
+
|
|
|
---
|
|
|
|
|
|
-## 九、进制转换总结
|
|
|
+## 七、Java 代码示例
|
|
|
|
|
|
-| 转换方向 | 方法 | 说明 |
|
|
|
-|---------|------|------|
|
|
|
-| 任意进制 → 十进制 | 按权展开法 | 每位数字 × 位权,再求和 |
|
|
|
-| 十进制 → 任意进制 | 除基取余法 | 不断除以目标进制,取余数从下往上排列 |
|
|
|
+```java
|
|
|
+int a = 0b0101011; // 二进制,加前缀 0b
|
|
|
+int b = 01234567; // 八进制,加前缀 0
|
|
|
+int c = 0x123AFEC9; // 十六进制,加前缀 0x
|
|
|
+
|
|
|
+System.out.println(a); // Java 自动转换为十进制输出
|
|
|
+System.out.println(b);
|
|
|
+System.out.println(c);
|
|
|
+```
|
|
|
+
|
|
|
+> 对应授课代码:`Demo01.java` — 进制基础概念
|
|
|
|
|
|
---
|
|
|
|
|
|
-## 练习题
|
|
|
+## 八、知识总结
|
|
|
+
|
|
|
+| 知识点 | 要点 |
|
|
|
+|-------|------|
|
|
|
+| 二进制 | `0b` 前缀,基数 2,符号 0/1 |
|
|
|
+| 八进制 | `0` 前缀,基数 8,3位二进制对应1位八进制 |
|
|
|
+| 十六进制 | `0x` 前缀,基数 16,4位二进制对应1位十六进制 |
|
|
|
+| 按权展开法 | 每位数字 × 位权,再求和 → 得到十进制 |
|
|
|
+| 除基取余法 | 不断除以目标进制,取余数从下往上排列 → 得到目标进制 |
|
|
|
+| 编码/解码 | 人→机器(编码),机器→人(解码) |
|
|
|
+
|
|
|
+---
|
|
|
+
|
|
|
+## 九、练习题(进制转换)
|
|
|
|
|
|
将十进制数 357 分别转换为二进制、八进制、十六进制:
|
|
|
-- 二进制:
|
|
|
-- 八进制:
|
|
|
-- 十六进制:
|
|
|
+- 二进制:**101100101**
|
|
|
+- 八进制:**545**
|
|
|
+- 十六进制:**165**
|
|
|
|
|
|
将十进制数 1234 分别转换为二进制、八进制、十六进制:
|
|
|
-- 二进制:
|
|
|
-- 八进制:
|
|
|
-- 十六进制:
|
|
|
+- 二进制:**10011010010**
|
|
|
+- 八进制:**2322**
|
|
|
+- 十六进制:**4D2**
|
|
|
+
|
|
|
+> 答案来自授课代码 `Demo03.java`
|
|
|
|
|
|
---
|
|
|
|
|
|
@@ -206,29 +202,138 @@ System.out.println(c);
|
|
|
### Java 代码示例
|
|
|
|
|
|
```java
|
|
|
-// char 类型可以直接赋值为整数,输出时自动转为对应字符
|
|
|
char c2 = 67; // 对应 'C'
|
|
|
char c3 = 90; // 对应 'Z'
|
|
|
System.out.println(c2); // 输出 C
|
|
|
System.out.println(c3); // 输出 Z
|
|
|
|
|
|
-// 判断字符是否为大写英文字母(利用 ASCII 码值范围)
|
|
|
char c1 = 'a';
|
|
|
-System.out.println(c1 >= 'A' && c1 <= 'Z'); // false,因为 'a' 不在 65~90 范围
|
|
|
+System.out.println(c1 >= 'A' && c1 <= 'Z'); // false
|
|
|
```
|
|
|
|
|
|
-### 课堂练习 Demo04.java
|
|
|
+---
|
|
|
+
|
|
|
+## 十一、课堂练习 — 综合复习(Demo04)
|
|
|
+
|
|
|
+`Demo04.java` 涵盖了之前学习的数据类型与运算符的综合练习题:
|
|
|
+
|
|
|
+| 练习 | 知识点 | 代码位置 |
|
|
|
+|------|--------|---------|
|
|
|
+| 算术运算 | `+ - * / %` | 第19~25行 |
|
|
|
+| 判断奇偶 | 三目运算符 `%2==0` | 第27~28行 |
|
|
|
+| 求最大值 | 嵌套三目 | 第30行 |
|
|
|
+| 判断闰年 | `&&` `||` 逻辑运算符 | 第32~33行 |
|
|
|
+| 评分等级 | 嵌套三目 `>=90?A:>=60?B:C` | 第35~36行 |
|
|
|
+| 范围判断 | `&&` 判断 10<x<100 | 第38行 |
|
|
|
+| ASCII 判断大写字母 | 字符比较 `>=65 && <=90` | 第40~47行 |
|
|
|
+| 前置/后置自增 | `++` 前缀与后缀区别 | 第49~55行 |
|
|
|
+| 数位拆分 | `%10` `/10%10` `/100` | 第57~63行 |
|
|
|
+| 三角形判断 | 两边之和大于第三边 | 第65行 |
|
|
|
+
|
|
|
+---
|
|
|
+
|
|
|
+## 十二、循环结构练习(Demo05 ~ Demo09)
|
|
|
+
|
|
|
+day04 引入循环结构(`for`、`while`),以下是课堂练习题:
|
|
|
+
|
|
|
+| 文件 | 题目 | 核心知识点 |
|
|
|
+|------|------|-----------|
|
|
|
+| `Demo05.java` | 输出斐波那契数列前10项 | `for` 循环、变量前移 `a=b; b=c` |
|
|
|
+| `Demo06.java` | 判断素数 | `for` 循环 + `if` 分支 + `break` |
|
|
|
+| `Demo07.java` | 数列求和 1 - 1/2 + 1/3 - ... 前10项 | `for` 循环、正负交替、浮点精度 |
|
|
|
+| `Demo08.java` | 判断回文数 | `while` 循环、数位反转 `b=b*10+f` |
|
|
|
+| `Demo09.java` | 计算 1!+2!+...+10! | `for` 循环、阶乘累积 `f*=i` |
|
|
|
+
|
|
|
+### Demo05 — 斐波那契数列
|
|
|
+
|
|
|
+第1项为0,第2项为1,从第3项开始每项等于前两项之和。
|
|
|
+
|
|
|
+```java
|
|
|
+int a = 0, b = 1;
|
|
|
+System.out.println(a);
|
|
|
+System.out.println(b);
|
|
|
+for (int i = 3; i <= 10; i++) {
|
|
|
+ int c = a + b;
|
|
|
+ System.out.println(c);
|
|
|
+ a = b;
|
|
|
+ b = c;
|
|
|
+}
|
|
|
+```
|
|
|
|
|
|
-授课代码中的 `Demo04.java` 涵盖以下知识点:
|
|
|
+### Demo06 — 判断素数
|
|
|
|
|
|
-| 练习 | 知识点 |
|
|
|
-|------|--------|
|
|
|
-| 算术运算 | `+ - * / %` |
|
|
|
-| 三目运算符 | 判断奇偶、求最大值、嵌套三目评分 |
|
|
|
-| 闰年判断 | `&&` `\|\|` 逻辑运算符 |
|
|
|
-| 字符比较 | ASCII 码值范围判断大写字母 |
|
|
|
-| 自增自减 | `++` 前置与后置的区别 |
|
|
|
-| 数位拆分 | 正整数按位取个、十、百位 |
|
|
|
-| 三角形判断 | 任意两边之和大于第三边 |
|
|
|
+素数:大于1的自然数,除了1和它本身外不再有其他因数。
|
|
|
+
|
|
|
+```java
|
|
|
+int n = 17;
|
|
|
+boolean b = n > 1;
|
|
|
+for (int i = 2; i <= n; i++) {
|
|
|
+ if (n % i == 0) {
|
|
|
+ b = false;
|
|
|
+ break;
|
|
|
+ }
|
|
|
+}
|
|
|
+System.out.println(b ? "no" : "yes");
|
|
|
+```
|
|
|
+
|
|
|
+### Demo07 — 数列求和(正负交替)
|
|
|
+
|
|
|
+求 1 - 1/2 + 1/3 - 1/4 + ... 前10项的和。
|
|
|
+
|
|
|
+```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);
|
|
|
+```
|
|
|
+
|
|
|
+### Demo08 — 判断回文数
|
|
|
+
|
|
|
+回文数:正读和反读都一样的数,如 12321。
|
|
|
+
|
|
|
+```java
|
|
|
+int n = 12321;
|
|
|
+int a = n; // 保存原始值
|
|
|
+int b = 0; // 用来存放反转后的数
|
|
|
+while (n > 0) {
|
|
|
+ int f = n % 10; // 取出最后一位
|
|
|
+ b = b * 10 + f; // 拼接反转
|
|
|
+ n /= 10; // 去掉最后一位
|
|
|
+}
|
|
|
+System.out.println(a == b ? "yes" : "no");
|
|
|
+```
|
|
|
+
|
|
|
+### Demo09 — 阶乘求和
|
|
|
+
|
|
|
+计算 1! + 2! + 3! + ... + 10! 的值。
|
|
|
+
|
|
|
+```java
|
|
|
+int sum = 0;
|
|
|
+int f = 1;
|
|
|
+for (int i = 1; i <= 10; i++) {
|
|
|
+ f *= i; // 计算当前阶乘
|
|
|
+ sum += f; // 累加
|
|
|
+}
|
|
|
+System.out.println(sum);
|
|
|
+```
|
|
|
+
|
|
|
+---
|
|
|
|
|
|
-完整代码见: [`Demo04.java`](../../授课代码/java-prep-bootcamp/src/com/lovecoding/day04/Demo04.java)
|
|
|
+## 十三、代码索引
|
|
|
+
|
|
|
+| 文件 | 完整路径 |
|
|
|
+|------|---------|
|
|
|
+| Demo01 | [`Demo01.java`](../../授课代码/java-prep-bootcamp/src/com/lovecoding/day04/Demo01.java) |
|
|
|
+| Demo02 | [`Demo02.java`](../../授课代码/java-prep-bootcamp/src/com/lovecoding/day04/Demo02.java) |
|
|
|
+| Demo03 | [`Demo03.java`](../../授课代码/java-prep-bootcamp/src/com/lovecoding/day04/Demo03.java) |
|
|
|
+| Demo04 | [`Demo04.java`](../../授课代码/java-prep-bootcamp/src/com/lovecoding/day04/Demo04.java) |
|
|
|
+| Demo05 | [`Demo05.java`](../../授课代码/java-prep-bootcamp/src/com/lovecoding/day04/Demo05.java) |
|
|
|
+| Demo06 | [`Demo06.java`](../../授课代码/java-prep-bootcamp/src/com/lovecoding/day04/Demo06.java) |
|
|
|
+| Demo07 | [`Demo07.java`](../../授课代码/java-prep-bootcamp/src/com/lovecoding/day04/Demo07.java) |
|
|
|
+| Demo08 | [`Demo08.java`](../../授课代码/java-prep-bootcamp/src/com/lovecoding/day04/Demo08.java) |
|
|
|
+| Demo09 | [`Demo09.java`](../../授课代码/java-prep-bootcamp/src/com/lovecoding/day04/Demo09.java) |
|