+
全加器的内部 = 两个半加器串联
+
+
+
+
第一步:半加器 ①
+
先算 A + B
+
+
+ A = {{ inputA ? '1' : '0' }}
+ B = {{ inputB ? '1' : '0' }}
+
+
→
+
+ 中间和: {{ xor1 ? '1' : '0' }}
+ 进位①: {{ carry1 ? '1' : '0' }}
+
+
-
-
中间值:
-
xor1 = A ⊕ B = {{ inputA ? '1' : '0' }} ⊕
- {{ inputB ? '1' : '0' }} =
- {{ xor1 ? '1' : '0' }}
-
({{ inputA !== inputB ? '不同' : '相同' }})
+
+
▸
+
+
+
+
第二步:半加器 ②
+
把中间和 + 低位进位
+
+
+ 中间和 = {{ xor1 ? '1' : '0' }}
+ Cin = {{ carryIn ? '1' : '0' }}
+
+
→
+
+ 本位: {{ sumOut ? '1' : '0' }}
+ 进位②: {{ carry2 ? '1' : '0' }}
+
+
-
- 本位:
- Sum = xor1 ⊕ Cin = {{ xor1 ? '1' : '0' }} ⊕
- {{ carryIn ? '1' : '0' }} =
- {{ sumOut ? '1' : '0' }}
- ({{ xor1 !== carryIn ? '不同' : '相同' }})
-
-
-
进位:
-
Cout = (A∧B) ∨ (xor1∧Cin) = ({{ carry1 ? '1' : '0' }}) ∨ ({{
- carry2 ? '1' : '0'
- }}) = {{ carryOut ? '1' : '0' }}
+
+
▸
+
+
+
+
第三步:合并进位
+
两路进位只要有一个是 1,就向高位进 1
+
+
+ 进位① = {{ carry1 ? '1' : '0' }}
+ 进位② = {{ carry2 ? '1' : '0' }}
+
+
→
+
+ 最终进位: {{ carryOut ? '1' : '0' }}
+
+
-
-
- 核心思想:
- 全加器 = 两个半加器 + 一个 OR 门。第一级半加器算
- A+B,第二级半加器把结果加上 Cin,OR 门合并两路进位信号。
-
@@ -214,302 +133,168 @@
import { ref, computed } from 'vue'
const inputA = ref(true)
-const inputB = ref(true)
+const inputB = ref(false)
const carryIn = ref(false)
+// 第一步:半加器 1
const xor1 = computed(() => inputA.value !== inputB.value)
const carry1 = computed(() => inputA.value && inputB.value)
-const carry2 = computed(() => xor1.value && carryIn.value)
+
+// 第二步:半加器 2
const sumOut = computed(() => xor1.value !== carryIn.value)
+const carry2 = computed(() => xor1.value && carryIn.value)
+
+// 第三步:OR 合并
const carryOut = computed(() => carry1.value || carry2.value)
+
+const cases = [
+ { a: 0, b: 0, cin: 0, sum: 0, carry: 0, key: '000' },
+ { a: 0, b: 0, cin: 1, sum: 1, carry: 0, key: '001' },
+ { a: 0, b: 1, cin: 0, sum: 1, carry: 0, key: '010' },
+ { a: 0, b: 1, cin: 1, sum: 0, carry: 1, key: '011' },
+ { a: 1, b: 0, cin: 0, sum: 1, carry: 0, key: '100' },
+ { a: 1, b: 0, cin: 1, sum: 0, carry: 1, key: '101' },
+ { a: 1, b: 1, cin: 0, sum: 0, carry: 1, key: '110' },
+ { a: 1, b: 1, cin: 1, sum: 1, carry: 1, key: '111' },
+]
+
+const explainText = computed(() => {
+ const a = +inputA.value
+ const b = +inputB.value
+ const c = +carryIn.value
+ const total = a + b + c
+ if (total === 0) return '0 + 0 + 0 = 0。本位写 0,不进位。'
+ if (total === 1) return `${a} + ${b} + ${c} = 1。本位写 1,不进位。`
+ if (total === 2) return `${a} + ${b} + ${c} = 2。二进制里 2 就是 "10",所以本位写 0,向左进 1。`
+ return `${a} + ${b} + ${c} = 3。二进制里 3 就是 "11",所以本位写 1,向左进 1。`
+})
diff --git a/docs/.vitepress/theme/components/appendix/computer-fundamentals/FunctionalUnitDemo.vue b/docs/.vitepress/theme/components/appendix/computer-fundamentals/FunctionalUnitDemo.vue
index afb91cd..77f9194 100644
--- a/docs/.vitepress/theme/components/appendix/computer-fundamentals/FunctionalUnitDemo.vue
+++ b/docs/.vitepress/theme/components/appendix/computer-fundamentals/FunctionalUnitDemo.vue
@@ -20,8 +20,7 @@
- 多路选择器 (MUX):像铁路道岔一样,根据"选择信号"决定让哪一路数据通过。
+ 多路选择器 (MUX):像铁路道岔一样,根据"选择信号"决定让哪一路数据通过。
diff --git a/docs/.vitepress/theme/components/appendix/data-encoding/AudioEncodingDemo.vue b/docs/.vitepress/theme/components/appendix/data-encoding/AudioEncodingDemo.vue
index a6e75f4..52a916f 100644
--- a/docs/.vitepress/theme/components/appendix/data-encoding/AudioEncodingDemo.vue
+++ b/docs/.vitepress/theme/components/appendix/data-encoding/AudioEncodingDemo.vue
@@ -9,8 +9,8 @@
-
+
-
diff --git a/docs/.vitepress/theme/components/appendix/data-encoding/PhotoUploadJourneyDemo.vue b/docs/.vitepress/theme/components/appendix/data-encoding/PhotoUploadJourneyDemo.vue
index 2c802b8..2b15ff5 100644
--- a/docs/.vitepress/theme/components/appendix/data-encoding/PhotoUploadJourneyDemo.vue
+++ b/docs/.vitepress/theme/components/appendix/data-encoding/PhotoUploadJourneyDemo.vue
@@ -1,123 +1,190 @@
-
-
+
+
+
+
+
-
{{ i + 1 }}
-
{{ step.label }}
+
+ ✓
+ {{ i + 1 }}
+
+
{{ step.label }}
+
-
-
-
-
-
+
+
+
+
+ {{ currentStepData.icon }}
+ {{ currentStepData.stageName }}
+ {{ stageStatus }}
+
+
+
+
+
-
{{ actor.icon }}
-
{{ actor.name }}
-
{{ actor.value }}
+
{{ actor.icon }}
+
+
{{ actor.name }}
+
{{ actor.value }}
+
+
+
+ ▶
+
+
+
-
+
+
+
+
- {{ arrow.label }}
- →
+ {{ i + 1 }}
+ {{ point }}
-
-
-
-
-
-
-
-
-
-
+
-
+
👤 分配1个用户
-
+
👥 分配100个用户
- 🔄 重置
+ 🔄 重置
@@ -64,9 +64,7 @@
💡
- 50/50分配能最快检测出差异,确保两组样本量足够大以获得统计显著性
+ 50/50分配能最快检测出差异,确保两组样本量足够大以获得统计显著性
@@ -260,7 +258,7 @@
-
+
🧮 计算所需样本量
@@ -296,9 +294,7 @@
💡
- 提升目标越小,所需样本量越大。5%的提升比20%的提升需要更多样本
+ 提升目标越小,所需样本量越大。5%的提升比20%的提升需要更多样本
diff --git a/docs/.vitepress/theme/components/appendix/development-tools/RegexDemo.vue b/docs/.vitepress/theme/components/appendix/development-tools/RegexDemo.vue
index dd28fc5..8979070 100644
--- a/docs/.vitepress/theme/components/appendix/development-tools/RegexDemo.vue
+++ b/docs/.vitepress/theme/components/appendix/development-tools/RegexDemo.vue
@@ -175,19 +175,11 @@
核心思想:
- 正则表达式是一种用特殊符号描述文本模式的语言,在搜索、替换、数据验证中无处不在。
- 记住几个核心符号(. * + ? \d \w [] ())就能覆盖 80%
- 的使用场景。点击任意符号可直接试验。
- 不需要自己从零写正则——常见场景(邮箱、手机号、URL)都有成熟的模式可以直接复用。
- 正则引擎从左到右逐字符匹配,遇到量词会"贪婪"地尽量多匹配,失败时"回溯"尝试其他路径。
+ 正则表达式是一种用特殊符号描述文本模式的语言,在搜索、替换、数据验证中无处不在。
+ 记住几个核心符号(. * + ? \d \w [] ())就能覆盖 80%
+ 的使用场景。点击任意符号可直接试验。
+ 不需要自己从零写正则——常见场景(邮箱、手机号、URL)都有成熟的模式可以直接复用。
+ 正则引擎从左到右逐字符匹配,遇到量词会"贪婪"地尽量多匹配,失败时"回溯"尝试其他路径。
diff --git a/docs/.vitepress/theme/components/appendix/development-tools/SSHAuthDemo.vue b/docs/.vitepress/theme/components/appendix/development-tools/SSHAuthDemo.vue
index de0ed23..6045b8d 100644
--- a/docs/.vitepress/theme/components/appendix/development-tools/SSHAuthDemo.vue
+++ b/docs/.vitepress/theme/components/appendix/development-tools/SSHAuthDemo.vue
@@ -2,9 +2,7 @@
@@ -28,7 +26,7 @@
🔑
密码登录
-
+
{{ i + 1 }}
{{ step }}
@@ -43,7 +41,7 @@
🔐
密钥登录
-
+
{{ i + 1 }}
{{ step }}
@@ -144,18 +142,14 @@
② 发送随机挑战
- "请证明你有私钥:用它签名这段随机数据"
+ "请证明你有私钥:用它签名这段随机数据"
③ 返回签名
- "用私钥签名后的结果(私钥本身不发送)"
+ "用私钥签名后的结果(私钥本身不发送)"
④ 用公钥验证
@@ -163,9 +157,7 @@
⑤ 认证成功
- "欢迎登录!从始至终,私钥没离开过你的电脑"
+ "欢迎登录!从始至终,私钥没离开过你的电脑"
@@ -211,21 +203,13 @@ Host github.com
核心思想:
- SSH
- 密钥登录比密码更安全,因为私钥从不在网络上传输,无法被中间人窃取。
- 一次 ssh-keygen
- 生成一对密钥:私钥自己保管,公钥放到目标服务器或平台。
- 认证过程基于"挑战-响应"机制:服务器出题,你的私钥签名作答,公钥验证答案。全程私钥不离开本机。
- SSH 密钥不仅用于服务器登录,也是 Git (GitHub/GitLab)
- 等开发工具的标准身份认证方式。
+ SSH
+ 密钥登录比密码更安全,因为私钥从不在网络上传输,无法被中间人窃取。
+ 一次 ssh-keygen
+ 生成一对密钥:私钥自己保管,公钥放到目标服务器或平台。
+ 认证过程基于"挑战-响应"机制:服务器出题,你的私钥签名作答,公钥验证答案。全程私钥不离开本机。
+ SSH 密钥不仅用于服务器登录,也是 Git (GitHub/GitLab)
+ 等开发工具的标准身份认证方式。
diff --git a/docs/.vitepress/theme/components/appendix/framework-nature/DomOperationCostDemo.vue b/docs/.vitepress/theme/components/appendix/framework-nature/DomOperationCostDemo.vue
index 344583b..99e4777 100644
--- a/docs/.vitepress/theme/components/appendix/framework-nature/DomOperationCostDemo.vue
+++ b/docs/.vitepress/theme/components/appendix/framework-nature/DomOperationCostDemo.vue
@@ -48,7 +48,7 @@
-
+
{{ i }}
修改 → 布局 → 绘制
diff --git a/docs/.vitepress/theme/components/appendix/framework-nature/WhatIsDomDemo.vue b/docs/.vitepress/theme/components/appendix/framework-nature/WhatIsDomDemo.vue
index 57bc7e9..08445b7 100644
--- a/docs/.vitepress/theme/components/appendix/framework-nature/WhatIsDomDemo.vue
+++ b/docs/.vitepress/theme/components/appendix/framework-nature/WhatIsDomDemo.vue
@@ -38,7 +38,7 @@
@mouseenter="highlightedTag = node.tag"
@mouseleave="highlightedTag = ''"
>
-
└─
+
└─
{{ node.label }}
"{{ node.text }}"
diff --git a/docs/.vitepress/theme/components/appendix/framework-nature/WhyNoAutoSyncDemo.vue b/docs/.vitepress/theme/components/appendix/framework-nature/WhyNoAutoSyncDemo.vue
index a4cffe3..3afe8f9 100644
--- a/docs/.vitepress/theme/components/appendix/framework-nature/WhyNoAutoSyncDemo.vue
+++ b/docs/.vitepress/theme/components/appendix/framework-nature/WhyNoAutoSyncDemo.vue
@@ -143,11 +143,11 @@
重置
-
+
为什么不自动?
JavaScript 的变量是"无感知"的。你执行 count = 4 时,JavaScript 引擎只是把内存中 count 的值从 3 改成 4,仅此而已。它不会通知任何人,不会触发任何回调,不会去检查页面上哪里显示了 count。所以界面不会有任何变化——除非你自己写代码去更新 DOM。
-
+
框架怎么做到的?
框架把你的数据用特殊机制包裹起来。以 Vue 为例,它用 JavaScript 的 Proxy(代理)功能拦截你对变量的赋值操作。当你写 count = 4 时,Proxy 会在赋值的同时自动执行一段"通知"代码,告诉框架"count 变了",框架再去找到所有用到 count 的 DOM 节点并更新它们。整个过程你不需要写任何额外代码。
diff --git a/docs/.vitepress/theme/components/appendix/git-intro/GitCommitFlow.vue b/docs/.vitepress/theme/components/appendix/git-intro/GitCommitFlow.vue
index 32ec773..750e27e 100644
--- a/docs/.vitepress/theme/components/appendix/git-intro/GitCommitFlow.vue
+++ b/docs/.vitepress/theme/components/appendix/git-intro/GitCommitFlow.vue
@@ -40,7 +40,7 @@
Changes not staged for commit:
@@ -65,7 +65,7 @@
Changes to be committed:
@@ -90,7 +90,7 @@
已提交记录 (git log):
diff --git a/docs/.vitepress/theme/components/appendix/ports-localhost/DevServerFlowDemo.vue b/docs/.vitepress/theme/components/appendix/ports-localhost/DevServerFlowDemo.vue
index 234b4a7..2dd5303 100644
--- a/docs/.vitepress/theme/components/appendix/ports-localhost/DevServerFlowDemo.vue
+++ b/docs/.vitepress/theme/components/appendix/ports-localhost/DevServerFlowDemo.vue
@@ -105,7 +105,8 @@ function reset() {
+ }]"
+>