これ何て呼びますか

基本情報技術者試験の問題について、

数値表現の問題でわからないものがあるので解説お願いしたいです。

—-

(1)8桁の2進数(11110011)2の2の補数は____
(2)負数を2の補数で表すとき、(1)の2進数(11110011)2を10進数で表すと____になる

—-

(1)は、ビットを反転+1で、
(00001101)2が答えになることは理解しています。

(2)について、(11110011)2の補数が(00001101)2であることから、答えは13と解答に書かれているのですが、これが理解できないです。

なぜ「負数を2の補数で表す」となったときに、元の数である(1)(11110011)2を10進数に直した値を、
2^7*1+2^6*1+…2^0+1と求めてはいけないのでしょうか?
負数を2の補数で表すと言っていることから、1ビット目がマイナスを表すことになるのか?と思ったのですが、1ビット目を抜いても-13にはならないのでよくわからず困っています。

わかりづらい文章で申し訳ありません。
解説お願いします。

A 回答 (1件)

「2の補数」の意味を理解していますか?



例えば、「4ビットだけで表わされた2進数」0010(2) = 2(10) の「負数」とはどういうことか考えてみましょう。
ここで
 0010(2) + XXXX(2) = 1 0000(2)
となったときに、右辺の一番左の「1」は「4ビットだけで表わされた2進数」では「オーバーフロー、桁あふれ」になるので、存在しないことになります。
つまり
 0010(2) + XXXX(2) = 0000(2)   ①
ということになります。
「足すと 0 になる数」なので「XXXX(2)」は「0010(2)」の負数(同じ絶対値で、符号を付けた数)ということになります。

それが「2の補数」という考え方です。

「2の補数」を作るには
(i) もとの数「0010(2)」の 0 と 1 をひっくり返す。つまり
 0010(2) → 1101(2)
これを「1の補数」というかな?
(ii) それに「1」を足す。つまり
 1101(2) + 0001(2) = 1110(2)
これが「2の補数」です。

①になるかやってみれば
 0010(2) + 1110(2) = 1 0000(2)
になるので、「1110(2)」は「0010(2)」の「負数表記」になることが分かります。

この「4ビットの2進数で、2の補数で負数を表す」とした場合には、「1110(2)」の先頭ビットの「1」は「負数」であることを示し、「4ビット全体で負数を表す」のであって、「1110(2)」そのものを通常の「2進数」と考えて
 1110(2) = 14(10)
としても意味がありません。あくまで
 1110(2) は 0010(2) の負数表現、1110(2) = -0010(2) = -2(10)
ということです。
つまり
・正数:0000(2) ~ 0111(2) = 0(10) ~ 7(10)
・負数:1000(2) ~ 1111(2) = -1(10) ~ -8(10)
という表記になるのです。
「2の補数で負数を表す」場合には、先頭ビットの「1」がマイナス負号を、「2の補数で表した2進数」がその「絶対値」を表すのです。

お示しの例題の場合には、
 
(1) 8桁の2進数 (11110011)2 は、「2の補数で負数を表す」とした場合には、先頭ビットが「1」なのでこれは「負数」です。

その「絶対値」が、2の補数である
 (00001101)2 = 13(10)
です。
つまり
  (11110011)2 = -13(10)
ということ。

先頭ビットが「1」の「負数」は、そのままでは「2進数表記」とはみなせません。「2の補数」で「正数」に置き換えてから、それに「負号マイナス」を付けて初めて「10進数の数値化」できるのです。


>(2)について、(11110011)2の補数が(00001101)2であることから、答えは13と解答に書かれているのですが、これが理解できないです。

答は「13」ですか? 「-13」と書かれていませんか?

「(11110011)2」の先頭ビットが「1」なので、これは負数。
「(11110011)2」の「2の補数」が「(00001101)2」なので、絶対値は「13」。
従って、
 (11110011)2 = -13(10)
という風になっていませんか?

上に書いたように、「2の補数で負数を表す」場合には、先頭ビットの「1」がマイナス負号を、「2の補数で表した2進数」がその「絶対値」を表すのです。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!