この記事では2の補数についてIT初心者にも分かりやすく解説します。
2の補数とは
- 補数とはマイナス(-)の記号を使わずに負の数を表現する方法
- 2の補数の計算方法
①元の数を0と1を反転する
②①の数に1を足す
基本情報では2の補数に関する問題がたまに出ます。是非最後までご覧ください。
まずは10進数で補数について考える
補数とは、「元の数」に足し合わせることで桁上がりする最小の数のことです。例えば、10進数の「23」の補数は「77」になります。なぜなら、23+77=100となり、「77」が「23」と足し合わせて桁上がりする最小の数だからです。
補数を使うメリット
なぜ補数なんて求める必要があるのでしょうか?その理由は「補数を使えば足し算で引き算を表現できるから」です。どういうことか見ていきましょう。
下の式を例に考えてみます。
321 – 44 = 277
補数を使う計算では、計算に使われる数字の中で最大の桁数の数字より更に1つ上の桁数の数字のうち、最小の数字をベースの数字とします。
今回の例で考えてみましょう。計算に使われる数字は「321」と「44」なので最大の桁数の数字は「321」です。この「321」より更に1つ上の桁数の最小の数字は「1000」になります。よって、今回のベースの数字は「1000」です。
次に今回の計算で引く数として使われている「44」に対して、ベースの数字「1000」を基準に補数を考えると「956」になります。なぜなら1000-44=956だからです。
では、補数を使って上の計算式を足し算で表現してみましょう。
321 + 956 = 1277
この結果から最上位の1を省くと「277」となり上の計算式と同じ答えになります。これが足し算で引き算を表現する方法です。
(おまけ)補数には2種類ある
補数には「基数の補数」と「減基数の補数」があります。上で説明した補数は「基数の補数」と呼ばれるものです。「減基数の補数」は基本情報で出題されないのでここでは説明を省略します。
「基数の補数」は「10の補数」とも呼ばれます。また「減基数の補数」は「9の補数」とも呼ばれます。
2進数で考える補数
2進数の補数にも基数の補数と減基数の補数がありますが、ここでも基本情報で出題される基数の補数のみ考えていきます。ちなみに、2進数の基数の補数は2の補数とも呼ばれます。
2の補数も10進数の場合と同じく、「元の数」に足し合わせることで桁上がりする最小の数のことです。例えば「101」の補数は「011」になります。なぜなら101+011=1000だからです。
2の補数は下の手順で求めることが出来ます。
- 元の数の0と1を反転させる
- 反転させた数に1を足す
「101」の0と1を反転させると「010」になり、これに1を足すと「011」になります。なので「011」は「101」の2の補数です。
負の数を表す補数
通常、8桁の2進数で表現できる数字は00000000~11111111です。10進数で言えば0~255ですね。負の数も表す場合は最上位の位を正負の表現に使います。具体的には最上位が0の場合は正の数を、1の場合は負の数を表します。
8桁の2進数で言えば、00000000~01111111は8桁目が0なので正の数、10000000~11111111は8桁目が1なので負の数になります。
では、負の数「11011110」は10進数で言うと何になるのでしょうか?ここで出てくるのが補数です。「11011110」は「00100010」の2の補数になります。「00100010」=「34」なので、「11011110」=「-34」となります。
実際に「11011110」=「-34」になっているか下の式を例に検証してみます。
64-34=30
この計算式を、負数を2の補数で表現する2進表記法で表すと、下の式になります。
01000000+11011110=100011110
※64=01000000、-34=11011110
10進数の「30」を2進数で表すと「00011110」になり、これは上の計算で求めた「100011110」から最上位の1を抜いた結果と同じになります。
これで2の補数が、負数になることが分かってもらえたと思います。
基本情報技術者試験での出題例
サンプル問題問1
基本情報技術者
科目A サンプル問題問1
負数を2の補数で表すとき,8ビットの2進正数nに対し-nを求める式はどれか。ここで,+は加算を表し,ORはビットごとの論理和,XORはビットごとの排他的論理和を表す。
ア (n OR 10000000)+00000001
イ (n OR 11111110)+11111111
ウ (n XOR 10000000)+11111111
エ (n XOR 11111111)+00000001
正解は”エ”
2の補数の求め方は
- 元の数の0と1を反転させる
- 反転させた数に1を足す
です。これに該当するのはエですね。
論理和・排他的論理和の意味が分からない人はこちらの記事をご覧ください。
平成30年度春期問1
基本情報技術者 午前試験
平成30年度春期問1
ある整数値を,負数を2の補数で表現する2進表記法で表すと最下位2ビットは”11″であった。10進表記法の下で,その整数値を4で割ったときの余りに関する記述として,適切なものはどれか。ここで,除算の商は,絶対値の小数点以下を切り捨てるものとする。
ア その整数値が正ならば3
イ その整数値が負ならば-3
ウ その整数値が負ならば3
エ その整数値の正負にかかわらず0
正解は”ア”
4桁の2進数を例にしてこの問題を考えてみましょう。
負数を2の補数で表現するので、0000~0111が正の数、1000~1111が負の数となります。
●ある整数値が正の場合
最下位2ビットが’11’なので、例えば’0011’や’0111’が当てはまりますね。’0011’は10進数で’3’、’0111’は10進数で’7’になり、それぞれを4で割ると余りは3になります。
●ある整数値が負の場合
最下位2ビットが’11’なので、例えば’1011’や’1111’が当てはまります。’1011’は’0101’の2の補数で、’1111’は’0001’の2の補数です。’0101’は10進数で’5’を、’0001’は10進数で’1’を表すので、’1011’は’-5’を、’1111’は’-1’を表します。
-5÷4=-1.25ですが、「商は絶対値の小数点以下を切り捨てる」と書いてあるので、商は-1となり、-5÷4=-1余り-1と表せます。同様にすると-1÷4=0余り-1となるので、ある整数値が負の場合は余りが-1になることが分かります。
以上のことから、
・整数値が正の場合、余りは3
・整数値が負の場合、余りは-1
となるので、答えはアです。
基本情報に関するの他の記事
ハードウェア | ソフトウェア | システム構成 |
ネットワーク | データベース | 開発手法 | 情報セキュリティ |
ハードウェアに関する記事
基数についての記事
【基本情報】コンピュータが理解できるのは0と1だけ?!
【基本情報】2進数と10進数を変換する方法を解説
【基本情報】2の補数について分かりやすく解説!
【基本情報】16進数とコンピュータは相性が良い
【基本情報】16進数と10進数を変換する方法を解説
情報の単位についての記事
【基本情報】ビットとバイトとは何か、1バイト=8ビットの理由も解説
論理演算についての記事
コンピュータの五大装置についての記事
【基本情報】コンピュータってなにで出来ている?-五大装置を解説
【基本情報】クロック周波数とは?なぜ必要なの?
【基本情報】RAMとROMの特徴と違いについて解説
【基本情報】キャッシュメモリについて解説