電子書籍の厳選無料作品が豊富!

10進数の -6と-51
を2,8,16進数で表すにはどうすればいいのですか?
過程を詳しく知りたいです。
マイナスが入るとどうすればいいのかわからないです。

A 回答 (6件)

補数となると「1の補数」と「2の補数」があって、ちょっと複雑です。



補数ではなく「負数」となると、意外と単純。

負数は単に「符号ビットが1になっている数値」です。

で「符号ビット」は、普通は「任意のビット数で数値を表す時、最上位のビット」を使います。

例えば「2ビットで数値を表す時、最上位ビットが1なら負数、0なら正数」と決めると、表現出来る数値は以下の4つです。

10 -2
11 -1
00 0
01 1

ここで「『-1』に1を足すと『0』になる」と言う数学のお約束があるので「-1」は「11」になります。

実際「11」に「1」を足すと「00」になります(「100」にはなりません。3ビット目は溢れて消え、下の2ビットの「00」だけ残ります。

上記の例では「2ビットで数値を表す時」でしたが、これが「8ビットで」「16ビットで」「32ビットで」となると、以下のようになります。

8ビット
11111101 -3
11111110 -2
11111111 -1
00000000 0
00000001 1
00000010 2
8ビットでは、-128~-1、0、1~127を表現できます。

16ビット
1111111111111101 -3
1111111111111110 -2
1111111111111111 -1
0000000000000000 0
0000000000000001 1
0000000000000010 2
16ビットでは、-32768~-1、0、1~32767を表現できます。

32ビット
11111111111111111111111111111101 -3
11111111111111111111111111111110 -2
11111111111111111111111111111111 -1
00000000000000000000000000000000 0
00000000000000000000000000000001 1
00000000000000000000000000000010 2
32ビットでは、-2147483648~-1、0、1~2147483647を表現できます。

8進数、16進数の時は、上記の2進数を単純に8、16進数に変換するだけです。

例えば、質問にある-6から0までを8ビットで表現するなら
11111010 -6 372(8) FA(16)
11111011 -5 373(8) FB(16)
11111100 -4 374(8) FC(16)
11111101 -3 375(8) FD(16)
11111110 -2 376(8) FE(16)
11111111 -1 377(8) FF(16)
00000000 0  000(0) 00(16)
となります。

ここで注意が1つだけ。「数値が何ビットで表現されているか?」が判っていないと、符号ビットの位置が決まらないので、8進数/16進数で書かれた数値を見ただけでは、数値が正数か負数か判断する事は出来なくなります。

例えば、6ビットの世界での-1を、2進、8進、16進にしてみます。2進では「111111」、8進では「33」、16進では「3F」になります。

-1が16進数で3Fになりましたが、ここで、16進数を知っている人に「16進数の3Fって、10進数で幾つ?」って聞いてみましょう。たいていの人が「63」と答えます。-1と答える人は居ない筈です。

なぜ全員が「63」と答えるかと言うと、質問に「数値を6ビットで表現した場合で」「最上位ビットは符号ビットで」と言う条件を示していないからです。

さて、ここで、質問への回答を考えてみます。

「10進数の -6と-51を2,8,16進数で表すにはどうすればいいのですか?」と言う質問ですね。

質問には「数値を何ビットで表現するか」が明確に書かれていません。何ビット分の2進数にするか、何ビット分の8進数にするか、何ビット分の16進数にするか、が判らなければ、符号ビットの位置も決められず、何桁書けば良いのかも判りません。

そうすると、質問の答えは、

「2、8、16進数にする時のビット数が不明なので、符号ビットの位置が決められず、2、8、16進数に変換する事が出来ない」

と言う事になります。

「マイナスが入るとどうすればいいのかわからないです。」については、

・数値を何ビットで表現するか決める
・何ビットで表現するか決めたら、最上位ビットを符号ビットにする
・「-1は全部のビットが1になる」と言うお約束(-1に1を足すと0になるお約束の事)を元に、求めたい数値を2進数にする(-1から順に1づつ引いても良いし、1、2、4、8、16、32づつ引いても良いし、補数を使って求めても良い)
・2進数から、8進、16進数にする

と言う方法で各進数に変換して下さい。
    • good
    • 0
この回答へのお礼

ありがとうございました。

>>質問には「数値を何ビットで表現するか」が明確に書かれていません。

問題が表のようになっていて、「空欄をうめよ」となっています。8桁の2進数が書かれている欄があるので8桁だと思います。すいませんでした。

お礼日時:2004/11/05 22:19

桁数が書いてないと問題として不適切だと思いますが、No.3の補足を見ると2進数は8桁で求めるんですね。



-6の場合、
2進数・・・数字を2進数にして1の補数に1を足す
 6→00000110→11111001→11111010
8進数・・・数字を8進数にして7の補数に1を足す(とりあえず3桁)
 6→006→771→772
16進数・・・数字を16進数にして15の補数に1を足す(2桁)
 6→06→F9→FA
※N進数の(N-1)の補数は、各桁の数字を(N-1)から引きます。
    • good
    • 0
この回答へのお礼

ありがとうございました。

お礼日時:2004/11/08 20:20

No.2 です。



> 2進数の足し算、引き算、やったことがありません。。。
10進数と全く同じですよ。
下の位から順に足していって、繰り上がったらひとつ上の位に渡す。例えば 3+6 = 13 を2進数でやると、
00000011
00000110
--------
00001001
です。小学校でやった足し算の筆算を思い出しながらやってみてください。

さて、ここからが計算機上で負の数を2の補数表示にしている最大の理由ですが、例えば、4 + (-2) のような負の数が混じった計算でも、全く同じやり方で計算できてしまいます。

00000100
11111110
--------
00000010

4の位(右から3つめ)で繰り上がった1が、左に伝播していって最終的に左から溢れてしまいますが、無視します。
ちゃんと答が2になっていますね。

-3 + -2 のような負の数どうしの計算も試してみましょう。

11111101
11111110
--------
11111011

しっかり-5になっています。

引き算も同じです。上の3つの例で普通に引き算の筆算を試してみればわかると思います。
    • good
    • 0
この回答へのお礼

二度もありがとうございます。
引き算試してみます。

お礼日時:2004/11/08 20:18

> 2,8,16進数で表すには



2進数の表し方に「1の補数」「2の補数」があるのは教科書に書いていますよね。

10進数の場合で補数というのは、ある数を足して99…9とか、100…0とかの数になる数の事です。
10進数の場合で、7に対する9の補数は2、7に対する10の補数は3となります。
10進数の場合で、123に対する9の補数は876、123に対する10の補数は877となります。

--
2進数の6は110です。
プラスの場合は頭に0、マイナスの場合は頭に1をつける事にします。
+6=+110=0110
-6=-110=1110
これも正負の数値の表現方法のひとつです。

問題は、
+6=0110
-6=1110
を符号を無視して足し算すると、
 10100
となり、0にはなりません。
常に先頭の符号を見ながら、0なら足し算、1なら引き算とせねばならず、コンピュータで扱うのに非常に都合が悪い事になります。

そこで、
+6=0110
-6=????
を足して
 10000
となるように????の部分を決めてしまえば、足し算と引き算を区別しなくてすむじゃん?
という考え方が出てきます。
この場合は、????の部分は10000から0110を引き算して得られます。
この考え方が2進数での2の補数に相当します。

--
> 10進数の -6と-51
> を2,8,16進数で表すにはどうすればいいのですか?

ですから、プラスの数
6=0110(2進)=06(8進)=06(16進)
を足して、
10000(2進)、100(8進)、100(16進)
となる
????(2進)、??(8進)、??(16進)
を答えれば良いという事になります。
    • good
    • 0
この回答へのお礼

ありがとうございました。

2進数の足し算、引き算、やったことがありません。。。
もしよろしければ教えて下さい。

お礼日時:2004/11/05 22:04

まだ締め切られてませんが、全く同じ質問が前に出ていますのでご参考に(下記URL)。



どちらの質問者の方も勘違いされているのかもしれませんが、
10進数の-6を2進数表示 → -110
というのが正しいんですよ。

2の補数表示というのは、計算機上ではそのように負の数を表現したほうが、いろいろと都合がいいのでそうしているだけです。

参考URL:http://oshiete1.goo.ne.jp/kotaeru.php3?q=1069969
    • good
    • 0
この回答へのお礼

ありがとうございました。

お礼日時:2004/11/05 22:24

8,16進数の場合はよく分かりませんが、2進数の場合は


まずマイナスを外してプラスの部分をビット表示します。(6は0110)
それから各ビットを反転させて(1001)1を足します。(1001+0001=1010)
で補数の場合は最上位ビットが±の役目をしていて1の場合はマイナス、
0の場合はプラスとなるわけです。(1010=-8+2=-6)
    • good
    • 0
この回答へのお礼

ありがとうございました。

お礼日時:2004/11/05 22:24

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