项目背景
在所有计算机系统中,加法是最基础、最频繁的操作之一:
- 整数加法
- 地址偏移
- 循环计数
- 浮点运算的底层
- 指令执行中的算术逻辑
但在硬件层面,计算机并不存在直接的加法指令,一切都来自于:
逻辑门 + 进位传播
Ripple Adder(涟波加法器)正是人类历史上最早、结构最清晰、最具教学价值的多位二进制加法器。
为什么叫'涟波(Ripple)'?
因为进位像水波一样,从最低位一层一层向高位传播:
Go 语言基于全加器结构实现 Ripple Adder 涟波加法器算法。通过半加器和全加器的组合,模拟二进制进位从低位到高位的传播过程。代码不依赖内置加法运算符,显式展示布尔逻辑运算与进位链机制,帮助理解硬件加法器原理及 CPU 算术单元基础工作方式。
在所有计算机系统中,加法是最基础、最频繁的操作之一:
但在硬件层面,计算机并不存在直接的加法指令,一切都来自于:
逻辑门 + 进位传播
Ripple Adder(涟波加法器)正是人类历史上最早、结构最清晰、最具教学价值的多位二进制加法器。
因为进位像水波一样,从最低位一层一层向高位传播:
C0 → C1 → C2 → C3 → ...
这种结构虽然速度不快,但:
用 Go 语言实现 Ripple Adder,本质上是在做三件事:
本项目目标是:
使用 Go 语言,基于全加器结构,实现一个可处理任意位二进制整数的经典 Ripple Adder(涟波加法器)算法。
算法应支持:
+ 完成核心逻辑单个位的加法规则:
| A | B | Sum | Carry |
|---|---|---|---|
| 0 | 0 | 0 | 0 |
| 0 | 1 | 1 | 0 |
| 1 | 0 | 1 | 0 |
| 1 | 1 | 0 | 1 |
功能:
逻辑表达式:
Sum = A XOR B
Carry = A AND B
功能:
逻辑表达式:
Sum = A XOR B XOR Cin
Carry = (A AND B) OR (Cin AND (A XOR B))
Ripple Adder 的实现流程如下:
用于构建全加器的基础模块。
// =======================================================
// 文件名:ripple_adder.go
// 功能:经典 Ripple Adder(涟波加法器)算法实现
// =======================================================
package main
import (
"errors"
"fmt"
)
// -------------------------------
// 半加器(Half Adder)
// -------------------------------
func HalfAdder(a, b int) (sum, carry int) {
sum = a ^ b // XOR
carry = a & b // AND
return
}
// -------------------------------
// 全加器(Full Adder)
// -------------------------------
func FullAdder(a, b, cin int) (sum, carry int) {
// 第一个半加器
s1, c1 := HalfAdder(a, b)
// 第二个半加器
sum, c2 := HalfAdder(s1, cin)
// 合并进位
carry = c1 | c2
return
}
// -------------------------------
// Ripple Adder(涟波加法器)
// -------------------------------
func RippleAdder(a, b []int) ([]int, int, error) {
if len(a) != len(b) {
return nil, 0, errors.New("binary inputs must have the same length")
}
n := len(a)
result := make([]int, n)
carry := 0
// 从最低位开始逐位相加
for i := n - 1; i >= 0; i-- {
result[i], carry = FullAdder(a[i], b[i], carry)
}
return result, carry, nil
}
func main() {
// 示例输入(二进制)
a := []int{1, 0, 1, 1} // 11
b := []int{0, 1, 1, 0} // 6
sum, carry, err := RippleAdder(a, b)
if err != nil {
fmt.Println("Error:", err)
return
}
fmt.Println("A =", a)
fmt.Println("B =", b)
fmt.Println("SUM =", sum)
fmt.Println("CARRY =", carry)
}
HalfAdder实现最基本的两位相加逻辑,输出和与进位。
FullAdder在半加器基础上引入输入进位,实现完整单比特加法。
RippleAdder通过串联多个全加器,模拟进位从低位到高位逐级传播的过程。
main用于验证算法正确性,展示完整加法流程。
通过本项目,我们完成了:
一句话总结:
Ripple Adder 是'最慢的加法器',但也是'最重要的教学加法器'
因为进位必须一位一位传播。
因为所有高速加法器都是在'解决它的问题'。
现代 CPU 用改进型,但原理完全继承。
Carry Lookahead Adder。

微信公众号「极客日志」,在微信中扫描左侧二维码关注。展示文案:极客日志 zeeklog
使用加密算法(如AES、TripleDES、Rabbit或RC4)加密和解密文本明文。 在线工具,加密/解密文本在线工具,online
将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online
将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online
将 Markdown(GFM)转为 HTML 片段,浏览器内 marked 解析;与 HTML转Markdown 互为补充。 在线工具,Markdown转HTML在线工具,online
将 HTML 片段转为 GitHub Flavored Markdown,支持标题、列表、链接、代码块与表格等;浏览器内处理,可链接预填。 在线工具,HTML转Markdown在线工具,online
通过删除不必要的空白来缩小和压缩JSON。 在线工具,JSON 压缩在线工具,online