数学基础
/
Feb 08, 2026
Step 1 01. 逻辑与布尔代数
<!-- Title: 01. 逻辑与布尔代数:代码世界的物理定律 -->
<!-- ID: 240 -->
<!-- Series: 程序员的数学修养 (ID: 16) -->
<!-- Author: 潘卫 -->
# 逻辑与布尔代数:代码世界的物理定律
## 为什么程序员需要懂逻辑?
逻辑是编程的基石,也是程序员最基本的“内功”。
你写的每一行 `if-else`,每一个 `while` 循环,本质上都是在构建一个逻辑系统。
逻辑混乱的代码,不仅难以维护,更是 Bug 的温床。
布尔代数(Boolean Algebra)之于计算机,就像物理定律之于现实世界。它是构建数字逻辑电路和编写软件程序的数学基础。
## 1. 布尔代数的核心运算
布尔代数只有两个值:`True` (1) 和 `False` (0)。
核心运算只有三个,但它们能组合出万千世界:
* **AND (与 / &&)**: 只有当所有条件都满足时,结果才为真。
* *场景*:登录时,(用户名存在) **AND** (密码正确)。
* **OR (或 / ||)**: 只要有一个条件满足,结果就为真。
* *场景*:支付时,(余额充足) **OR** (绑定的信用卡可用)。
* **NOT (非 / !)**: 取反。黑变白,真变假。
* *场景*:(用户未登录) -> 跳转登录页。
## 2. 摩根定律 (De Morgan's Laws):重构代码的神器
这是布尔代数中对程序员最有用的定律,常用于简化复杂的条件判断。
**定律公式**:
1. `!(A && B) == !A || !B` (“非与” 等于 “非或非”)
2. `!(A || B) == !A && !B` (“非或” 等于 “非与非”)
### 实战重构案例
假设我们有一段代码,用于判断“是否**不**允许用户访问”:
```javascript
// 原始代码:逻辑读起来很绕
if (!user.isVIP && !user.isAdmin) {
showAd(); // 如果不是VIP 且 不是管理员,则显示广告
}
```
利用摩根定律第 2 条 `!A && !B == !(A || B)`,我们可以将其重构为:
```javascript
// 重构后:更符合自然语言思维
if (!(user.isVIP || user.isAdmin)) {
showAd(); // 如果用户 (是VIP 或 是管理员) 取反,则显示广告
}
```
或者反过来思考,什么时候**允许**访问?`isVIP || isAdmin`。那么不允许就是对它取反。
## 3. 短路求值 (Short-circuit Evaluation)
这是逻辑运算在编程语言中的一个重要特性,利用好它可以写出更健壮的代码。
* **`A && B`**: 如果 A 为假,B 根本不会执行(因为结果注定为假)。
* **`A || B`**: 如果 A 为真,B 根本不会执行(因为结果注定为真)。
### 防御性编程应用
```java
// 危险代码:如果 str 为 null,会报空指针异常 (NPE)
if (str.length() > 0 && str != null) { ... }
// 安全代码:利用短路特性,先判断 null
if (str != null && str.length() > 0) {
// 只有 str 不为 null 时,才会执行 length()
...
}
```
### 默认值应用
在 JavaScript/Python 等动态语言中,常用 OR 来设置默认值:
```javascript
// 如果 config.timeout 存在(真),就用它;否则使用默认值 3000
const timeout = config.timeout || 3000;
```
## 4. 异或 (XOR) 的神奇妙用
**XOR (异或 / ^)**: 相同为 0,不同为 1。
它有一个神奇的特性:`A ^ A = 0`,`A ^ 0 = A`。
**面试题**:在一个数组中,除了一个数字出现了一次,其他数字都出现了两次。如何找到那个只出现一次的数字?
**解法**:将所有数字进行异或运算。
因为 `A ^ A = 0`,成对出现的数字会互相抵消变成 0,最后剩下的就是那个落单的数字。
```java
int singleNumber(int[] nums) {
int result = 0;
for (int num : nums) {
result ^= num;
}
return result;
}
```
## 结语
逻辑不仅仅是 `if` 和 `else`,它是程序员思考问题的路径。
清晰的逻辑产出清晰的代码,混乱的逻辑产出“屎山”。
掌握布尔代数和摩根定律,能让你写出更简洁、更可读的代码。
P
潘卫
南京市沉思波网络科技有限责任公司创始人、CEO
您的观点 (可选)
🎁 注册账号,同步您的个性化学习路径