# 量子比特 · 把 qubit 的状态打印出来看

> 经典 bit 只能是 0 或 1，量子比特(qubit)却能处于两者的「叠加」。这一章用 Qiskit 的状态向量把 qubit 的内部状态直接打印出来，配上刚好够用的数学，讲清振幅、概率，以及 n 个 qubit 为什么能装下 2ⁿ 个数。

- 作者：David（道雾轩）
- 专栏：写给程序员的量子计算（https://daiw.org/manual/quantum-computing.md）
- 最后更新：2026-07-14
- 原文：https://daiw.org/manual/quantum-computing/qubit
- 转载与引用：请注明出处并附原文链接（https://daiw.org/about/copyright）

# 量子比特 · 把 qubit 的状态打印出来看

上一章那个 H 门，把 qubit「置于叠加态」。可叠加态内部到底长什么样？好在**模拟器能让我们作弊**——直接把 qubit 的完整状态打印出来看。这一章就这么干：先看到，再理解。

## qubit 的状态，是一个向量

经典 bit 只有两个值：0 或 1。量子比特(qubit)的状态，是这两个「基础状态」的**线性组合**，写成向量最清楚。约定两个基础态：

$$
\ket{0} = \begin{bmatrix} 1 \\ 0 \end{bmatrix}, \qquad \ket{1} = \begin{bmatrix} 0 \\ 1 \end{bmatrix}
$$

那个尖括号记号 $\ket{0}$（读作「ket 0」）就是「状态 0」的意思——你先把它当成一个**列向量的名字**即可。一个一般的 qubit 状态是：

$$
\ket{\psi} = \alpha\ket{0} + \beta\ket{1} = \begin{bmatrix} \alpha \\ \beta \end{bmatrix}
$$

$\alpha$、$\beta$ 是两个**复数**，叫**振幅(amplitude)**。经典 bit 是这个向量的两个特例（$\ket{0}$ 或 $\ket{1}$）；而 qubit 可以是**任意**满足下面这条归一化约束的组合：

$$
|\alpha|^2 + |\beta|^2 = 1
$$

## 打印出来看

空口无凭。上一章那个过了 H 门的 qubit，它的 $\alpha$、$\beta$ 到底是多少？用 Qiskit 的 `Statevector` 直接打印（注意：**看状态时不要加测量**——测量会破坏它，下一章说）：

```python
from qiskit import QuantumCircuit
from qiskit.quantum_info import Statevector

qc = QuantumCircuit(1)
qc.h(0)                      # 只加 H,不测量
print(Statevector(qc))
```

```text
Statevector([0.70710678+0.j, 0.70710678+0.j],
            dims=(2,))
```

两个振幅都是 $0.707 \approx \frac{1}{\sqrt{2}}$。也就是说，H 门把初始的 $\ket{0}$ 变成了：

$$
\ket{+} = \frac{1}{\sqrt{2}}\ket{0} + \frac{1}{\sqrt{2}}\ket{1}
$$

这个「两个振幅相等」的叠加态太常用，有个专门的名字叫 $\ket{+}$。作为对照，一个什么都没做的 qubit（初始就是 $\ket{0}$）：

```python
print(Statevector(QuantumCircuit(1)))
# Statevector([1.+0.j, 0.+0.j], dims=(2,))   → 就是 |0⟩ = [1, 0]
```

**现在「叠加」不再是玄学了——它就是那个 `[0.707, 0.707]` 向量，你亲眼看到了。**

## 振幅不是概率，概率是振幅的模平方

这是最关键、也最容易搞混的一点：

<Callout type="warn">
  **振幅 $\alpha$ 本身不是概率；测量得到某个结果的概率，是对应振幅的「模平方」 $|\alpha|^2$。** 上面 $\ket{+}$ 的两个振幅都是 $\frac{1}{\sqrt{2}}$，所以测到 0 的概率是 $\left|\frac{1}{\sqrt{2}}\right|^2 = \frac{1}{2}$，测到 1 也是 $\frac{1}{2}$——这正好解释了[上一章](https://daiw.org/manual/quantum-computing/setup)那个「约五五开」的结果！

  为什么强调这个区别？因为振幅**可以是负数、甚至复数**，而概率永远非负。振幅的正负号带来的**相消 / 相长**，是量子计算全部威力的来源（叫**干涉**，[后面](https://daiw.org/manual/quantum-computing/superposition)会专门玩）。如果只盯着概率，你会漏掉那个符号——而那个符号，才是魔法所在。
</Callout>

## 一个 qubit 两个数，n 个 qubit 呢

上面一个 qubit 的状态，要两个复数（$\alpha$、$\beta$）才能描述。那两个 qubit 呢？**四个数**（对应 $\ket{00}, \ket{01}, \ket{10}, \ket{11}$ 四个基础态的振幅）。三个 qubit，**八个数**。规律是：

$$
n \text{ 个 qubit 的状态,需要 } 2^n \text{ 个振幅来描述}
$$

<Callout type="info">
  **这就是量子计算「指数级」威力的源头。** 300 个 qubit 的状态，需要 $2^{300}$ 个振幅——这个数比宇宙里的原子总数还多，任何经典计算机都**存不下**。而一台量子计算机，用 300 个物理 qubit 就「装下」了这个状态，并能让一个门操作**同时作用在所有 $2^{300}$ 个振幅上**。

  但先泼盆冷水：这**不等于**「量子计算机能同时算 $2^n$ 个答案然后挑一个」——那是最常见的误解。测量时你只能得到**一个**结果，且是概率的。量子算法的精妙，在于用干涉**让错误答案的振幅相消、正确答案的振幅相长**，使你测量时**大概率**测到想要的那个。这个「怎么把答案『放大』出来」的门道，是[算法那一站](https://daiw.org/manual/quantum-computing/grover) 的核心。
</Callout>

## 顺带：Bloch 球

单个 qubit 的状态还能画成一个球面上的点——**Bloch 球**。$\ket{0}$ 在北极，$\ket{1}$ 在南极，$\ket{+}$ 在赤道上。量子门就是**旋转这个球**。Qiskit 能画：

```python
from qiskit.visualization import plot_bloch_multivector
plot_bloch_multivector(Statevector(qc))   # 需要 matplotlib
```

Bloch 球是建立单比特直觉的好工具（[调试那章](https://daiw.org/manual/quantum-computing/debugging) 会用它来「看」门做了什么）；不过多比特就画不下了（维度太高），那时得靠别的手段。

## 小结与下一章

qubit 的状态是一个振幅向量 $\alpha\ket{0}+\beta\ket{1}$，满足 $|\alpha|^2+|\beta|^2=1$；我们用 `Statevector` 把它**打印了出来**，亲眼确认了叠加就是 `[0.707, 0.707]`。记住那条铁律：**概率 = 振幅的模平方**，而振幅的正负号（相位）藏着量子计算的全部魔法。n 个 qubit 需要 $2^n$ 个振幅——这是威力之源，但别误以为能「同时读出所有答案」。

我们一直在回避一件事：**测量**。上面看状态时特意「不加测量」，因为测量会把叠加态一把「拍死」成一个确定值。这个诡异又核心的操作，下一章讲透。👉 [测量：为什么一测，叠加就没了](https://daiw.org/manual/quantum-computing/measurement)。

## 参考文献

- [1] Qiskit 官方文档.「Quantum states and Statevector.」https://docs.quantum.ibm.com/guides —— `Statevector` 用法。
- [2] Michael Nielsen.「Quantum Computing for the Very Curious.」https://quantum.country/qcvc —— 面向初学者、极佳的振幅与测量直觉。
- [3] Nielsen & Chuang.《Quantum Computation and Quantum Information》， §1.2 —— qubit 与态向量的正式定义。
