算術演算
引き算回路
足し算回路をひっくり返す
インクリメント回路をひっくり返すだけでデクリメント回路ができたように、足し算回路をひっくり返すだけで引き算回路ができます。 できた回路は重ね合わせにも自動的に対応しています。
負の数
上の例では \(a\) が \(b\) よりも大きいため、\(a \mathrel{-}= b\) の値は正の数になります。 逆に \(b\) を \(a\) よりも大きくすると負の数が出てくるはずです。
負の数は二進数でどう書けるでしょうか。 負の数を二進数で表現するには、「2 の補数表現」を使います。 2 の補数とは、「ある自然数を 2 進数で表したときに、足し合わせるとちょうど桁が一つ増える最小の数」です。 たとえば 1 (二進数で 001) の補数は 111 です。 なぜならば、001 に 111 を足すと \(001 + 111 = 1000\) となり、ちょうど桁が一つ増えるためです。 よって、1 の補数である 111 は二進数での -1 となります。
1 から 4 までの補数は次のようになります。
十進数 | 二進数 | 2 の補数 (負の数) |
---|---|---|
1 | 0001 | 1111 |
2 | 0010 | 1110 |
3 | 0011 | 1101 |
4 | 0100 | 1100 |
表から推測できるように、2 の補数は最上位ビットが必ず 1 になります。 つまり 2 の補数表現では、最上位ビットを見ればその数が正か負かがすぐ分かります。
ある自然数を \(-1\) 倍した数 (2 の補数) は、一般に次のように求めることができます。
- 自然数を二進数にして、すべてのビットを反転する
- \(+1\) する
負の二進数から正の二進数を求めるには、逆のステップを行います。
- \(-1\) する
- すべてのビットを反転する
このことを頭に入れて、実行結果が負となる引き算回路を実行してみましょう。 出力が \(-1, -2, -3\) の重ね合わせになることを確認してください。
このように、2 の補数のような古典コンピュータの算術演算で使われるデータ表現は、量子コンピュータの算術演算でもそのまま使うことができます。 そして、量子コンピュータ上ではさらに重ね合わせて計算できてしまうのがおもしろいところです。