今回のテーマは、「2の補数」である。
コンピュータは0と1だけで情報を表す
4ビットでは24 = 16通りの組み合わせがある。これで、16種類の符号を表すことができる。
この符号を0以上の2進数に対応させてみよう。
2進数の0000~1111を表すことができる。
しかし、これでは負数を表すことはできない。どのように負数を表すかはコンピュータの設計者が決める。かつては、1の補数を用いて負数を表していた。
なお、補数(ほすう)とは、与えられた数をある決められた数から引いて得られる数のことである。
例えば、10進数の「10の補数」の場合、お互いに足したら桁が上がる最小の数は10のべき乗である。元の数が1桁であれば10の1乗、101 =10が「元の数」と「補数」を合計した数になる。
「7」の補数は、「3」(101 =10)
一方、「9の補数」の場合、お互いに足しても桁が上がらない数の最大値は、10のべき乗から1を引いた値になる。元の数が1桁であれば101-1=9が「元の数」と「補数」を合計した数になる。
「7」の補数は、「2」(101 ー1=9)
この考え方をnビットの2進数の補数に当てはめてみよう。
現在の多くのコンピュータは2の補数を用いて負数を表している。この補数を使うことによる最も大きなメリットは、「マイナス記号を使わずに負数を表現することができる」という点である。
例えば、4ビットの2進数なら、10000から正数を引いたものが負数を表している。
一番左が符号ビット
さて、負数を2の補数で表すと、表現できる値の範囲が変わる。一番左が符号を表す符号ビットとなり、1のときに負数を表すことになる。
nビットで表現できる値の範囲
nビットで表現できる正整数の範囲
0~2nー1
(例)4ビット 0~15
負数を2の補数で表すとき、nビットで表現できる整数の範囲
符号ビット 0:ゼロか正、1:負
ー2n-1 ~ +2n-1 ー1
(例)4ビット ー8~+7
いかがであろうか。あくまでも便宜的な考え方である。
しかし、この考え方がITの基礎になっている。
コメント