2の補数について調べてみたらようやく腹落ちしたので共有します

2024/11/22に公開

最近、コンピュータで数値計算がどう行われているかに興味を持ち、「負の数ってどうやって表現してるんだろう?」と調べてみました。意外にも、これが「2の補数」という考え方に基づいていると知り、非常に面白かったので今回まとめてみることにしました。

この記事では、2の補数とは何か、どうして負の数を表現できるのか、その仕組みをわかりやすくお伝えします!「2の補数」という言葉がちょっと難しそうに聞こえますが、実は非常に合理的で、コンピュータが効率よく計算をするための知恵なんです。


2の補数って何?まずは簡単な説明から

まず、「2の補数」とは、コンピュータで負の数を表現するための方法です。これを使うと、正の数も負の数も一貫して同じ方法で計算できるようになります。

特に、「ビット反転+1」という操作で負の数が簡単に得られるのが2の補数の特徴です。この方法を使うことで、加減算がシンプルに行え、コンピュータにとって非常に効率的な仕組みになります。

例えば、4ビットで「-3」を表現する場合、「+3」(0011)をビット反転(0を1に、1を0に)して+1すると、1101 となり、これが「-3」を表します。

もともとの2の補数の考え方

2の補数の考え方の基本は、「2のべき乗から引く」というアイデアです。具体的には、nビットの数値では 2^n を基準とし、そこから対象の数を引くことで負の数を得ます。

たとえば、4ビットの場合:

  • 2^4 = 16 なので、-3 は「16 - 3 = 13」と計算して、4ビットの 1101(13に相当)で表します。

これがもともとの方法ですが、直接「2のべき乗から引く」よりも、ビット反転+1を使うと同じ結果が得られるため、実際にはこの簡単な方法が使われています。

なぜ「2の補数」を使うの?

2の補数が使われる理由は、計算の効率を大幅に上げるためです。具体的には次のようなメリットがあります:

  1. 加減算がシンプルになる

    • 引き算を「足し算」として処理できるため、コンピュータは加算回路だけで符号付きの加減算を行えます。
  2. 0が一意に表現される

    • 他の方法(例:1の補数)では +0 と -0 が存在してしまうのですが、2の補数では 0 が1通りしかないため、計算がシンプルになります。
  3. オーバーフローやアンダーフローが簡単に検出できる

    • ビット数を超えた計算が発生した場合に、符号ビットを確認するだけでエラーがわかります。

2の補数の歴史:誰が考えたの?

2の補数という考え方は、特定の個人が発見したものではなく、計算機科学やハードウェア設計の発展の中で自然と生まれた便利な方法です。

コンピュータの黎明期(1940〜1950年代)、特にIBMのエンジニアやジョン・フォン・ノイマンといった研究者たちの手によって、この方法が実際の設計に採用されるようになり、現在のコンピュータでも標準的に使われています。

ビット反転+1で絶対値を求める方法

負の数の2の補数表現が与えられた場合、その絶対値(符号を取り除いた値)を求めるには、再度「ビット反転+1」を行います。

例えば、「1101」(-3)が与えられた場合:

  1. ビット反転:1101 → 0010
  2. +1する:0010 + 1 = 0011

これで絶対値「3」が得られます。2の補数を用いることで、正と負の数の関係が対称に保たれ、計算が一貫して行えるのが特徴です。

まとめ:2の補数はコンピュータの知恵の結晶!

2の補数は、コンピュータが負の数を効率的に扱うために考えられた方法で、「ビット反転+1」というシンプルな操作で負の数を表現できる便利な仕組みです。

そのおかげで:

  • 正負の数を一貫して扱える
  • 加減算がシンプルに行える
  • 0が一意に表現できる

といった多くの利点が得られます。

この記事を通じて、コンピュータの内部でどうやって負の数を表現しているのか、少しでも興味を持っていただけたらうれしいです!私自身もまだ勉強中の身ですが、この知識がみなさんの理解の助けになれば幸いです。

Discussion