したらばTOP ■掲示板に戻る■ 全部 1-100 最新50 | メール | |

喫茶店の相談カウンター

254めもり:2008/04/21(月) 01:28:33 ID:cq5Ew8VM0
「2進数で負の数を表す」には、2の補数を利用してあげれば楽

では簡単な問題を解きながら考えましょう。
問題「10進数の-5を2進数で表せ。但しデータビットは4ビットとし、負の数は2の補数表現で表すものとする。」

いきなり-5を負の2進数に直すのは大変なので、まず、考えるのは、
「-5+5を2進数でやったら、桁が1つ増えりゃいいんだよな?」という事です。
「5を4bitの2進数で表すとAAAAになって、そいつと-5の2進数BBBBを足すと10000になるんだな」
と分かれば後は計算あるのみ。

まず、5を2進数にします。5(10)→101(2)。ただ、4bitと指示があるので「0101」ですね。
で、これと-5(以後、2進数でBBBBと表記しますね)を足せば10000になるはず!
ということは、
0101+BBBB=10000と表せるので、右辺と左辺をググッ!っと移動させて、
10000-0101=BBBBですな。ここはがんばって引き算します。
すると、BBBB=1011。これが答えです。

もう1つの答えの出し方は、もっと簡単です。
0000-1をすると当然-1を2進数で表したものが出てきます。
そして、その値はといえば、>>252で書いたように、1111です。以後-5になるまで1個ずつ-1していきます。

0(10) → 0000(2)
-1(10)→ 1111(2)
-2(10)→ 1110(2)
-3(10)→ 1101(2)
-4(10)→ 1100(2)
-5(10)→ 1011(2)

この方法なら簡単ですが、数字が大きくなると大変なことになります。
では、大変な問題を1つ
「-385を2の補数表現で表せ。但しデータビットは10bitとする。」
やることは同じです。
「-385と385をそれぞれ2進数で足し算した11桁になるのね。」
385を2進数に直すと、110000001なので10bitに直して「0110000001」
0110000001+求めたいヤツ=10000000000なので
10000000000-0110000001=1001111111
が答えですね。これを、385回引き算を繰り返すのは、ちょっと・・・・。

さて、ここまでで分からなくなるところがあるとすると、
「10進数を2進数に直す(いわゆる基数変換)」ところと「2進数の引き算」でしょうか?言ってくれればまた対応しますb


新着レスの表示


名前: E-mail(省略可)

※書き込む際の注意事項はこちら

※画像アップローダーはこちら

(画像を表示できるのは「画像リンクのサムネイル表示」がオンの掲示板に限ります)

掲示板管理者へ連絡 無料レンタル掲示板