プロが教える店舗&オフィスのセキュリティ対策術

8ビット浮動小数点数 0 1000 100 を10進法
8ビット浮動小数点数 1 1100 011 を10進法
8ビット浮動小数点数 0 0011 001 を10進法
の答えが分かる方ぜひ教えてください

A 回答 (3件)

8bitの浮動小数の規格は無いので


まずそれを決めるところから始めないといけない。
IEEE754風だと
先頭bitは符号bit、続いて指数部、仮数部だろう。

指数部はその符号なし2進値の最大値の半分を切り下げた値を
オフセットに持ち
指数=指数部の値-オフセット とします。
仮数部は 2進の実数の小数点以下 1.XXX のXXXを表すとします。
#これもIEEE754風

仮に1、4、3bitでゆくと

0 1000 100= 1 × 2^(8-7)× (1+1/2)=3
1 1100 011 =(-1) ×2^(12-7)×(1+1/4+1/8)=-44
0 0011 001 = (-1) × (3-7)×(1+1/8)=0.0703125

仮定てんこ盛りなんで
信じないように(^_^;)
    • good
    • 1

うーん...


特に説明なく「浮動小数点数」と言ったら、通常IEEE754(参考↓)
https://ja.wikipedia.org/wiki/IEEE_754
のことを指すんだけど、これには8ビットの形式は含まれていない。
あなたが使っているテキストなり、受けた講義なりで使っている
8ビット浮動小数点数の定義を確認しないと、質問のビット列が
何を示しているのかを知る方法は無い。
定義は、確認するのもので、想像しても意味ないから。
    • good
    • 2

その前に「8ビット浮動小数」をどのように表すのかを定義する必要があります。


テキストなり、講義で「こう定義する」と明記されているのでは?
まずは、それを確認して、その定義どおりに求めるだけです。

おそらく「8ビット」の先頭に設けられた「1ビット」が「符号」を表すのでしょうね。「0」が「正」で、「1」が「負」でしょうか。
(逆に定義することだってできます)

次の8ビットのうち、どこが「仮数部」で、どこが「指数部」なのでしょうね。
桁の分け方からすると、左から2~5ビットの4ビットが「仮数」、6~8の3ビットが「指数」のようですね。「仮数」より多くのビットを「指数」に割り当てても有効桁数が小さくて使いものになりませんから。

このうち「仮数部」は、たとえば「※○○〇[2]」として「※」が必ず「1」になるように「指数部」で調節すればよいのですが、それが「必ず1」なら別に表記する必要もないので、有効桁をできるだけ増やすために
「1○○○○[2]」として「〇」を仮数4ビットで表せば、実質「5桁」を表すことができます。
なお、これを「整数」として扱うか、「0.※○○〇[2]」とか「1.○○○○[2]」として「小数」として扱うかなどの「小数位置」の決め方も定義によります。

さらには、「指数部」は、小数を取り扱うために「マイナス」も表したいですが、符号だけに1ビットを使うのはもったいないので、使えるビットの「半分」を「正」、半分を「負」として使うようにすることが多いです。
そのためには
・2の補数を用いる方式
 000~111[2] のうち
 000~011[2] を 0~3[10]
 100~111[2] を -4~-1[10]
・バイアスを用いる方式
 000~111[2] = 0~7[10] を -3 (あるいは -4)して
 000~011[2] を -3~4[10](あるいは -4~3[10])と読み替える
などの方式があり得ます。

お使いの定義がどれであるか分かりませんが、ここでは「仮数部」は「整数」、指数部は「バイアス」を使って「-3」する方式で表す定義であると仮定してやってみましょう。

>8ビット浮動小数点数 0 1000 100 を10進法

・符号:「0」なので「正」
・仮数部:1000[2] → 1 1000[2] = 24[10]
・指数部:100[2] = 4[10] → 「1」
よって、
 0 1000 100[2] = +24 × 10^1 = 240

>8ビット浮動小数点数 1 1100 011 を10進法

・符号:「1」なので「負」
・仮数部:1100[2] → 1 11000[2] = 56[10]
・指数部:011[2] = 3[10] → 「0」
よって、
 1 1100 011[2] = -56 × 10^0 = -56

>8ビット浮動小数点数 0 0011 001 を10進法

・符号:「0」なので「正」
・仮数部:0011[2] → 1 0011[2] = 35[10]
・指数部:001[2] = 1[10] → 「-2」
よって、
 0 0011 001[2] = +35 × 10^(-2) = 0.035


もし、お使いの定義が異なるようでしたら、それに合わせてやってください。
    • good
    • 3

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