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

補数というものがよくわかりません。
参考書を読んだのですが、いまいち理解できませんでした…。
(0111 1110)※2(小さい2は※2と表記します)の2の補数を求めろ、という問題は、どのようにして解けばよいのでしょうか。

また2進数についてなのですが、2進数を用いて(38+18)を計算せよ、という問題があります。
これは、(3×2の1乗+8×2の0乗)+(1×2の1乗+8×2の0乗)
=6+8+2+8=14.

…で答えは14??と思ったのですが、答えもないのでわかりません;
全然違っていたら是非解き方を教えてください。

A 回答 (7件)

nの補数というのは、「ある値の、桁の数全てをnにする数」のことです。


たとえば12345の9補数というのは
99999-12345
なので87654となります。
以下、情報学校卒業から時間が経っているので不安ですが、
0111 1110 →これの1の補数を求める
1000 0001 ←これに1を足したのが2の補数だから
1000 0010 ←これが解

二問目は(38+18)※10という意味ではないでしょうか?
38を二進数に直して (100110)※2
18を二進数に直して (10010)※2
足すと (111000)※2=(56)※10

……詳しくはリンク先を見て下さい(汗

参考URL:http://ja.wikipedia.org/wiki/%E8%A3%9C%E6%95%B0
    • good
    • 0
この回答へのお礼

なるほど!
よくわかりました。
二問目については私滅茶苦茶やってましたね…笑。
理解できてよかったです。どうもありがとうございました。

それで、もう一問わからなくなってしまった問題があるのですが…。
よろしければアドバイスをくださると助かります。

2の補数を用いて、(118-72)を計算しろという問題です。
○○の2の補数、という問題の求め方は理解できたのですが、いきなり2の補数を用いて…とは??
お礼欄に質問してしまってすいません。

お礼日時:2006/10/23 21:05

2の補数は、


 0と1をひっくり返して1をたす
と覚えました。
0111 1110なら、
1000 0001にして、1を足して
1000 0010です。 …合ってるかな?

38+18は10進数ですね。これを2進数に直すと、
0010 0110 ←2^5+2^2+2^1
0001 0010 ←2^4+2^1
これを足すと
0011 1000 ←2^5+2^4+2^3で32+16+8=56です。
    • good
    • 0
この回答へのお礼

全然問題を理解できていませんでした…(恥。
わかりやすいアドバイスどうもありがとうございます。
大変助かりました。
もしよろしければ、no1さんのお礼欄へ追記した問題も目に通してくださるとありがたいです…。
よろしくお願いします。

お礼日時:2006/10/23 21:08

(0111 1110)※2


2の補数は1の補数に+1です
1の補数は上記2進数を1、0をひっくり返したものとなります
1の補数 (1000 0001)※2
2の補数 (0111 1111)※2  です

答えは(14)※10 2進数を用いて答えるならば
(1110)※2 です
    • good
    • 0

↓まちがいました


il||li & il||li
    • good
    • 0
この回答へのお礼

大丈夫ですよ~。
私の質問にわざわざ時間を割いてくださってありがとうございました。

お礼日時:2006/10/23 22:51

No.1です。


ぶっちゃけ「2の補数を使う利点って何よ」と思いませんか?
思っていたら次に述べることをよくお読みになってください

たとえば(56-36)※10を考えます。
引き算ですよね?間違いなく引き算ですよね!?
でも(56+(-36))※10という足し算に変形できますよね。
さて、結論から言うと、2の補数を使えば、負の数を表現できるのです!!
(56)※10=(111000)※2
(36)※10=(100100)※2
(-36)※10=(011100)※2
三行目は(28)※10という気がしますが、とりあえず進みましょう
(56-36)※10=(111000+011100)※2
=(1010100)※2
となります。さて、計算結果を十進数に直すと52になります。
これは間違いですね。では一番左の1を無視するとどうでしょう。
(0010100)※2=(20)※10
では56-36は?もちろん20です。

つまり補数を使った足し算の時には一番左の数を無視するのが特徴です。

では問題の(118-72)※10をします。
(118)※10=(1110110)※2
(72)※10=(1001000)※2
(-72)※10=(0111000)※2
(118-72)※10=(10101110)※2←左の数は無視するので
(0101110)※2=(46)※10

この回答への補足

まだ見ていてくださったんですね!助かります。
まず(56-36)※10の方で理解するはずが…途中でわからなくなってしまいました;;
(36)※10=(100100)※2というところまではわかりましたが、(-36)※10=(011100)※2これはどのように計算したのでしょうか?
マイナスがついただけでいきなり混乱してきました。。

とりあえずその途中式は考えずに次へ進んでみましたが、
(56-36)※10=(111000+011100)※2
=(1010100)※2
ここで、111000+011100を計算すると、何故か1111000になってしまいます。
計算の仕方で何か誤解をしているんでしょうか。1+0だと0で1繰り上がり、繰り上がって次の桁が1+1+1になると、答えは1でまた1繰り上がり…というような計算をしてしまっています。伝わらなかったらすいません。

私が計算してしまうとこんな風になってしまうので、10進数に直すと52になるところも、84になってしまいました!
途中式は
(1010100)※2=1×2の6乗+0×2の5乗+…0×2の1乗+0×2の0乗です。

補足日時:2006/10/23 22:18
    • good
    • 0

No.2です。

「なぜ2の補数を使うのか??」
コンピュータは
 引き算ができない
からです。(足し算しかできない)
そのため、No.5の回答のように36を2の補数で-36に置き換えて計算するのです。
    • good
    • 0
この回答へのお礼

二度のご解答ありがとうございます。
no5さんの回答をじっくり読んで手元で計算してみたのですが、うまくゆきませんでした…本当にお手数おかけしまして恐縮です(汗。
-36にするあたりから躓いているので、また計算しなおしてみます。
ありがとうございました。

お礼日時:2006/10/23 22:49

No.1です。

いやぁ、言葉足らずでスイマセン(^^;

(36)※10=(100100)※2
これの2の補数は(011100)※2
2の補数の求め方はわかりますよね

(56-36)というのは(56+(-36))
ですね?ここは大丈夫でしょうか?

さて、2の補数とは、
「変換前の数に、マイナスを掛けたもの」と同じような働きをします。

つまり
「56-36」=「56+(36の2の補数)」
という関係があります。
わかりやすく絞ると
-36=36の2の補数
です。だから
(-36)※10=(011100)※2

そして、計算してみると確かに(118-72)※10=(1010100)※2になります。

さて、
「補数を使った足し算をしたら、計算結果の一番左の数を無視するのが特徴」
なんです。

質問者さんが苦労して求められた(1010100)※2
一番左の数を見ないで下さい
そうすると
2^4+2^2=20
ですよ
    • good
    • 0
この回答へのお礼

できました!
2の補数の意味がやっとよくわかった気がします!
何度も回答してくださって感謝してもしきれないくらいです…。
とても丁寧でわかりやすい回答でした。
理解できると嬉しいですね 笑。すっきりしました。
類似問題がもう一題あるので頑張ってみます。
今回は本当にどうもありがとうございましたm(_ _)m!

お礼日時:2006/10/23 23:57

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