プロが教えるわが家の防犯対策術!

(1)10進数1、2、3の値を2進数3桁で記述しなさい。またこれらの2の補数を求め3桁で記述しなさい。
(2)2進数における「2の補数」は、コンピュータにおける数値の扱いにおいて重要な役割を担うことができる。その役割について説明しなさい。
(3) (1)の解答から(2)で解答した役割は適切に機能していることが分かる。その理由を説明しなさい。
(4)2進数で表記したある数値の「2の補数」の求め方としてして、「各桁の1と0を反転し、それに1を加える」という方法がある。この方法が成立する理由を説明しなさい。(ヒント:2^b-1がどういう数であるかを考えるとよい)

この問題の(2)からどう説明していいか分かりません。
どなたか教えて下さい。

A 回答 (3件)

(1)は、おそらく001,010,011、補数は111,110,101になったと思います。


(2)は、「最初の桁が0なら正の数、1なら負の数になる」という事だと思います。
だとすれば、(3)は(1)が実際にそうなっている、で答えになると思います。
普通は8桁とか16桁とかですけどね…。
(4)たとえば1を表す時、+1は001、-1は111でした。
+1 + -1 = 0と同様に2進数でも計算すると、
001 + 111 = 1000ですが、この場合、3桁での記述なので、4桁目はオーバーフローとなり、
000が答えになります。
つまり、反転して1を加える事で、足すと0になる数を作れるので、成立している、と。
2^b-1は、bは桁数を示しており、それ以上の数は扱えない(オーバーフローする)事を示していると思われます。
ちなみに、8桁だと-1は11111111になりますね。
000000001を足すと、9桁目がオーバーフローするので、00000000になります。

以上でよろしいでしょうか…?
    • good
    • 0
この回答へのお礼

わかりやすかったです!
ありがとうございます。

お礼日時:2011/06/18 00:04

10進数は数値の後に(10)を付け、2進数は数値の後に(2)を付け、


2進数の負数は数値の後に(2の補数)を付けることにします。

(1)
1(10)=001(2), 111(2の補数)
2(10)=010(2), 110(2の補数)
3(10)=011(2), 101(2の補数)

(2)
負数を扱えるようになる。
2の補数を取ることで減算を加算で行える。

(3)
1+(-1)=001(2)+111=000(2)=0(10)
2+(-2)=010(2)+110(2の補数)=000(2)=0(10)
3-1=3+(-1)=011(2)+111(2の補数)=010(2)=2(10)
(-1)+2=111(2の補数)+010(2)=001(2)=1(10)
2-3=2+(-3)=010(2)+101(2の補数)=111(2の補数法)=-1(10)

(4)
a3a2a1(2)の2の補数をb3b2b1(2)とすると
a3a2a1(2)+b3b2b1(2の補数)=000(2) …(A)

a3a2a1(2)の1の補数をc3c2c1(2)とすると
a3a2a1(2)+c3c2c1(1の補数)=111(2)
両辺に1=001(2)を加えると
a3a2a1(2)+c3c2c1(1の補数)+001(2)=111(2)+001(2)=000(2)…(B)
(A)と(B)を比較すると
b3b2b1(2の補数)=c3c2c1(1の補数)+001(2) …(C)
と言う関係にあります。
この関係は、2の補数は1の補数に1=001(2)=1(10)を加えて得られることを表します。

なお、c3c2c1(1の補数)は
a3+c3=1
a2+c2=1
a1+c1=1
という関係にあります。
    • good
    • 0
この回答へのお礼

なるほど!
丁寧な解説ありがとうございます。

お礼日時:2011/06/18 17:01

多分計算機学とかの教科書の加算器とか減算関係のあたりにここらへんの内容があると思います。



とりあえず、2進数とか2の補数は分かってると仮定します。

適当に2進数を決めてください、次にその数の2の補数を求めてください。
それを足しあわせてみてください。

それを3つくらいの数でやってみると面白いですよ。

それが分かれば3も分かるかな4もね
    • good
    • 0

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