• 締切済み

2進数表現

負数を表すのに2の補数を用いる16ビットの2進数表現(固定小数点)について次のことについて教えてください。 1.表現できる正の最大数を2進数、10進数で表すとどうなるか。 2.表現できる最小の負数(絶対値が最大の負数)を2進数、10進数で表すとどうなるか。 この2つの問題なのですが、どう考えればいいのでしょうか?題意の負数を表すのに2の補数を用いる16ビットの2進数表現(固定小数点)からあまり意味が分かっていないのですが… よろしければ答えだけではなく考え方も教えてください。よろしくお願いします。

みんなの回答

  • info222_
  • ベストアンサー率61% (1053/1707)
回答No.4

>題意の負数を表すのに2の補数を用いる16ビットの2進数表現(固定小数点)からあまり意味が分かっていない 16ビット2の補数法による2進数の表現と10進数の対応は以下のようになります。 16ビット2の補数法 10進法 0111 1111 1111 1111 ... +2^15-1=+32767 0111 1111 1111 1110 ... +2^15-2=+32766 0111 1111 1111 1101 ... +2^15-3=+32765 ..... 0000 0000 0000 0100 ... +4 0000 0000 0000 0011 ... +3 0000 0000 0000 0010 ... +2 0000 0000 0000 0001 ... +1 0000 0000 0000 0000 ... 0 1111 1111 1111 1111 ... -1 1111 1111 1111 1110 ...-2 1111 1111 1111 1101 ... -3 1111 1111 1111 1100 ... -4 ..... 1000 0000 0000 0010 ... -2^15+2=-32766 1000 0000 0000 0001 ... -2^15+1=-32767 1000 0000 0000 0000 ... -2^15=-32768 >1.表現できる正の最大数を2進数、10進数で表すとどうなるか。 正の最大数の2進数=0111 1111 1111 1111 10進数に直せば =+2^15-1=+32767 >2.表現できる最小の負数(絶対値が最大の負数)を2進数、10進数で表すとどうなるか。 最小の負数(絶対値が最大の負数)を2進数=1000 0000 0000 0000 10進数に直せば = -2^15=-32768

11snoopy11
質問者

お礼

回答ありがとうございました。お礼が遅くなり申し訳ないです。 これからもよろしくお願いします。

  • chie65535
  • ベストアンサー率43% (8518/19364)
回答No.3

別の考え方。 符号が無い16ビットで、以下の計算をすると、ビットが溢れて、どれも答えは0です。 1111111111111100+0000000000000100=0000000000000000 1111111111111101+0000000000000011=0000000000000000 1111111111111110+0000000000000010=0000000000000000 1111111111111111+0000000000000001=0000000000000000 10進数に直した時「足して0になる」のですから、上から順に -4+4=0 -3+3=0 -2+2=0 -1+1=0 になります。 符号が無い16ビットで計算していた筈ですが、実は「マイナスとプラスの足し算」だったのです。 つまり「2進数で1111111111111100は、10進数で-4だった」のです。 出てきた数を0を中心に並べ直すと     ↑ 1111111111111100 -4 1111111111111101 -3 1111111111111110 -2 1111111111111111 -1 0000000000000000 0 0000000000000001 1 0000000000000010 2 0000000000000011 3 0000000000000100 4     ↓ になります。 上記の表は「最上位ビットは符号ビット」と言う「お約束」に従っていますね? ここで、16ビットではなく「3ビット」で考えてみます。 上の表から、下3ビットだけ残して、上のビットを削ってみます。 100 -4 101 -3 110 -2 111 -1 000 0 001 1 010 2 011 3 100 4 「100」だけ「-4と4が同じ」になります。 ここで「最上位ビットは符号ビット」と言う「お約束」を思い出して下さい。「100 4」は「お約束に従ってない」ので、表から外します。 すると、3ビットの表は 100 -4 101 -3 110 -2 111 -1 000 0 001 1 010 2 011 3 になります。 更に1ビット削って2ビットの範囲に絞り「お約束」に従っている物だけに絞ると、最終的に 10 -2 11 -1 00 0 01 1 になります。 逆に、4ビットにすると 1000 -8 1001 -7 1010 -6 1011 -5 1100 -4 1101 -3 1110 -2 1111 -1 0000 0 0001 1 0010 2 0011 3 0100 4 0101 5 0110 6 0111 7 となります。 それぞれの「2ビットの表」「3ビットの表」「4ビットの表」で「一番上と一番下」が「負の最小値」と「正の最大値」になります。 2ビットの表 10 -2 負の最小 01 1 正の最大 3ビットの表 100 -4 負の最小 011 3 正の最大 4ビットの表 1000 -8 負の最小 0111 7 正の最大 ここで、それぞれの最小、最大の値を、良く見て下さい。 負の最小は、-(2の(ビット数-1)乗)、になっています。 正の最大は、(2の(ビット数-1)乗)-1、になっています。 16ビットだと 負の最小=-(2の(16-1)乗)=-(2の15乗)=-32768 正の最大=(2の(16-1)乗)-1=(2の15乗)-1=32767 になります。 これは、何ビットの時でも同じです。

11snoopy11
質問者

お礼

回答ありがとうございました。お礼が遅くなり申し訳ないです。 これからもよろしくお願いします。

  • chie65535
  • ベストアンサー率43% (8518/19364)
回答No.2

>1.表現できる正の最大数を2進数、10進数で表すとどうなるか。 2の補数を用いた2進数表現では、一番上のビット(MSB、最上位ビット)を「符号ビット」に使います。 一番上のビットが0なら0または正数、一番上のビットが1なら負数、と決めます。 16ビットで表現できる正の最大値は「符号ビットが0で、それ以外がすべて1」です。 「符号ビット以外が全部1」なら、もう、それ以上大きくなれません(それ以上1を足せない)から「正の最大値」です。 つまり、2進数で「0 111111111111111」ですから、10進数で、32767です。 >2.表現できる最小の負数(絶対値が最大の負数)を2進数、10進数で表すとどうなるか。 16ビットで表現できる負の最小値は「符号ビットが1で、それ以外がすべて0」です。 「符号ビット以外が全部0」なら、もう、それ以上小さくなれません(それ以上1を引けない)から「負の最小値」です。 つまり、2進数で「1 000000000000000」です。 これを「10進数にする時」は「-1から、1を何回引けるか?」で考えます。 「-1」は「負の数の中の、最大の値」ですから「符号ビットが1で、それ以外がすべて1」です。 「符号ビット以外が全部1」なら、もう、それ以上大きくなれません(それ以上1を足せない)から「負の最大値」です。 つまり「-1」は「1 111111111111111」です。 「-1から、1を何回引けるか?」は「-1から、その値を引いてしまう」と求まります。  1 111111111111111 -) 1 000000000000000 -------------------------------   111111111111111 と言う計算で「2進数で111111111111111回、1を引ける」と判ります。 2進数で111111111111111は「1+2+4+8+16+32+64+128+256+512+1024+2048+4096+16384」なので、32767です。 つまり「2進数で1 000000000000000」は「-1から、1を32767回引いた数」です。 10進数で計算すると「-1-(1×32767)=-1-32767=-32768」です。 なので 2進数で1 000000000000000 10進数で-32768 が答えです。

11snoopy11
質問者

お礼

回答ありがとうございました。お礼が遅くなり申し訳ないです。 これからもよろしくお願いします。

  • f272
  • ベストアンサー率46% (8003/17107)
回答No.1

2の補数による符号つきで考えると16ビットで 最大なのは0111111111111111(最上位が0であとはすべて1) 最小なのは1000000000000000(最上位が1であとはすべて0) です。10進で表現すれば 最大なのは2^15-1=32767 最小なのは-2^15=-32768 です。全部で32767-(32768)+1=2^16=65536個の数値が表現できます。

11snoopy11
質問者

お礼

回答ありがとうございました。お礼が遅くなり申し訳ないです。 これからもよろしくお願いします。

関連するQ&A

  • 負数を2の歩数で表現する固定小数点表示法においてnビットで表現できる範

    負数を2の歩数で表現する固定小数点表示法においてnビットで表現できる範囲 この範囲の小さい方がなぜそうなるのかよくわかりません。たとえば4ビットのとき、1111の補数は10000にならないといけないから1111の補数が表現できないということですか?

  • 数値を浮動小数点表示

    基本情報技術者の勉強を始めたのですが、 浮動小数点の問題で分からないものがありました。 問題は、 ・基数は2。 ・数値を24ビットで表現。 ・左から1ビットは仮数の符号を表す。 (0なら正、1なら負) ・左から数えて2ビット目から8ビット目までで 2のべき乗を表す。(負数は2の補数で表す) ・右16ビットは仮数の絶対値を表す。 (あと、左から数えて8ビット目と9ビット目の間が 小数点位置、だという表示があります。) 以上のように24ビットの浮動小数点表示で、最大数を 16進数で表したものはどれか? この問題の答えは3FFFFFとなっているのですが、 どうしてこのような解答になるのでしょうか? ヒントには「指数部は負数を2の補数で表すので、左から 2ビット目も0でなければならない」とあるのですが、 わけわからない状態です。 簡単で結構ですので、教えていただけないでしょうか。 よろしくお願いします。

  • 記数法(n進数)

    ① −(2D)16 を符号付絶対値 8 ビットで表す ② −(146)8 を「負数は 2 の補数で表現する」8 ビットで表す ③ 符号付絶対値 8 ビット (10110101)2 を 10 進数で表す ④「負数は 1 の補数で表現する」 8 ビット (01011001)2 を 8 進数で表す ⑤「負数は 2 の補数で表現する」 8 ビット (10111011)2 を 16 進数で表す ()の後の数字は小文字です。 n進数からm進数への変換と計算はできるようになったのですが、ビットの表現などが分からないので教えて頂きたいです。

  • 補数表現で表現できる数値の範囲

    8ビット固定小数点(補数表現)で表現できる数値の範囲を 求める問題があります。 この場合の補数表現は2の補数且つ符号付絶対値表現なのでしょうか? また、この問題の解説をお願いします。

  • 2の補数表現2進数が表す10進数は?、

    次の2の補数表現の2進数が表す10進数はいくらか? 1111 1111 1111 1111 1111 1111 1111 1111 という問題があるのですが、 これを解くと、まず、上のビット列は2の補数表現なのだから、これはマイナスですよね?そして、次にビット列を2の補数を求めるやり方でやると元の数がわかりますよね(この辺がいまいち解っていない)? という事は全ビットを0にして、最下位ビットに1を 足せばいいから0000 0000 0000 0000 0000 0000 0000 0000 + 1 =0000 0000 0000 0000 0000 0000 0000 0001 となります。10進数だと 1を表すから答えはー1という事になるのでしょうか?お願いします。

  • 符号付の整数8ビット…

    教えてください。 符号付整数8ビットの2の補数で表現するときの11101111-11110011の計算を2進数で示すときの途中の計算方法を教えてください。 10進数のー13を8ビットの固定小数点(負数は2mの補数形式)の途中の計算方法も教えてください。

  • 2進演算について。

    以下の問題でのこの答えが合っているか自信が無いので確認と間違いがあれば指摘をお願いします。 (1)次の整数を8bitsの符号+絶対値表現、2の補数表現、127増し表現で表現しなさい。    -20    +55 (2)次の10進小数を、32ビットの浮動小数点表示しなさい。    -123.8125 答(1) -20 (+絶対値表現)→ 1001 0100 (2の補数表現) → 0001 0100 (127増し表現) → ? -20の+絶対値表現というのはそのまま20の8bit表示でいいんでしょうか? マイナスなので一番左のビットに1を立てればいいだけでしょうか? それと-20の2の補数表現は-20の2進表現を逆数にして1足すので結局20の2進数でいいのでしょうか? +55 (+絶対値表現)→ 0011 0111 (2の補数表現) → 1100 1001 (127増し表現) → ? これは+なので普通に考えてこの答えで間違いがあるでしょうか? それといずれの問題でも「127増し表現」というのはどうすればいいのでしょうか? 答(2) -123.8125の32ビット浮動小数点表示は 123.8125(10進)→ 111 1011.1101(2進) 0.11110111101×2^7 (正規化) で、32ビットの浮動小数点表示は 1 00000111 11110111101000000000000 なると思うのですが、どうでしょうか? 解答と指摘をお願いします。

  • 8ビットを2進数で表現すると…

    質問です。 符号付の整数を8ビットの2進数で表現するとき、00110111-11000001の演算結果はどのようになるのでしょうか? 符号ビットは左端にあり、負数は2の補数で表します。

  • 10進数を2進数に

    10進数を2進数に変換する問題なのですが、 まったくもって理解ができません、教えて頂ければ幸いです S(符号)は1ビットで仮数の符号を表す E(指数部)は4ビットで指数を表し負数は2の補数で表現 M(仮数部)は11ビットで仮数の絶対値を表す 基数は2とする 仮数の0,2進数の少数以下第一位が1になるように、正規化された形で表す 小数点はEとMの位置にする 0の表現はー0と+0の二通りがあり特別に指数部と仮数部をすべて0にする 問.10進数の-5.25を2進数で表示しなさい 問.10進数の-0.125を2進数で表示しなさい 答えと解き方を教えて頂ければ幸いです

  • 2進数の補数表示について

    よろしくお願いします 「負の数(-128)を8ビットの2の補数表示するとき、どうなるか?」 の問題で、わからない箇所があります。 1.最上位ビットは正・負を表す。 2.負の数:-127を2の補数を使用して表現する。    (例)-1(10)==>    まず、正で考える。      ==> 0000 0001(2)      「確認」 1111 1110(反転)            +1(プラス1) ---------- 1111 1111(2)(答え) -127(10)      ==>0111 1111(2)  まず、正で表す。    「確認」        1000 0000(反転)           +1 (プラス1) ---------- 1000 0001(答え) ここからが疑問なんです。    -128(10)の場合      ==>1000 0000(2) まず、正で考える。    「確認」        0111 1111(反転) +1 (プラス1)       -----------      1000 0000(2)(答え) ↑ ・答えがプラスの128(10)=>10000000(2)と同じではない  でしょうか? ・このときの最上位ビットは桁上がりの「1」と正負の違  いを表す「1」のどちらを表しているのですか? ・たとえば「負数を2の補数で表すとき,8ビットで  表現できる整数の範囲は10進数でどれか。」など  の問題で答えが正の127は理解できるのですが、  負は「-128」ということがよくわかりません。 一応検索をしてみましたが、類似回答では理解できませんでした。よろしくお願いします。