dポイントプレゼントキャンペーン実施中!

(0.01)10を全体が2バイトで基数は8、仮数部は12bits、指数部は3bitsでかさあげ表現の浮動小数点表示を用いて2進数表示すると( )2となる。

という問題で答えが0010101000111101なのですがどうしてそうなるのかわかりませ。

詳しく解説してもらえないでしょうか?
よろしくお願いします! 

A 回答 (3件)

>(0.01)10を全体が2バイトで基数は8、仮数部は12bits、指数部は3bitsでかさあげ表現の浮動小数点表示を用いて2進数表示すると( )2となる。



2バイト(16ビット)の構成は
「全体の符号1ビット(正0/負1)+指数部3ビット(基数8)+仮数部12ビット」
のようです。

>答えが0010101000111101なのですがどうしてそうなるのかわかりませ。
>詳しく解説してもらえないでしょうか?

上の構成では
先頭の1ビット目=0で正の数(+)
2~4ビット目の3ビット=指数部(010)2(かさ上げ表現:エクセス4コード)
 ⇒2-4=-2⇒指数部:8^(-2)=1/64
5~16ビット目の12ビット(仮数部)=(0.101000111101)2=0.639892578125
となるので
不動小数点数を10進数に直すと
+0.639892578125*(1/64)=0.009998321533203125≒0.01
(二進化するとき2進12ビットを超える桁は切り捨てる(2進化によるビット落ち)ので元の数値との誤差がでます。)
と確かに確認できます。

実際に(0.01)10を「符号ビット+指数部が基数8の3ビットのエクセス4方式、仮数部12ビット」で浮動小数点表示に変換したい場合は次のように求めます。

まず、(0.01)10が正の数なので符号ビット=0
(0.01)10から指数部と仮数部を求める
絶対値が1未満の数値の場合、8倍することを繰り返して行って
(0.5)以上、1未満になるような8のべき乗数nを求める。
 (0.01)10*8=(0.08)10(n=1)
 (0.08)10*8=(0.64)10(n=2) …これでOK
 仮数部は(0.64)10
 指数部は8^(-n)=8^(-2)

1未満の仮数部は、小数以下を2倍する事を繰り返し整数部への繰上げを並べて2進数に変換する。
 (0.64)10 *2=(1.28)10→ 整数部1→ (0.1)2
 (0.28)10 *2=(0.56)10→ 整数部0→ (0.10)2
(0.56)10 *2=(1.12)10→ 整数部1→ (0.101)2
 (0.12)10 *2=(0.24)10→ 整数部0→ (0.1010)^2
 (0.24)10 *2=(0.48)10→ 整数部0→ (0.10100)^2
 (0.48)10 *2=(0.96)10→ 整数部0→ (0.101000)^2
 (0.96)10 *2=(1.92)10→ 整数部1→ (0.1010001)2
 ……  ← 2進数の小数以下のビット数(桁数)が12になるまで繰り返す。
 …  → (0.101000111101)2
この小数以下の「101000111101」が浮動小数点表示の5~16ビット目になります。

次に指数部の8^(-2)は
基数が8、べき乗指数(-2)は、(かさ上げ表現:エクセス4コード)なので4=(100)2だけかさ上げして(加えて)
(-2)+4=2=(010)2
この「010」が「かさ上げ表現:エクセス4コード」による指数部として浮動小数点表示の
指数部の2~4ビット目になります。
これで1~16ビット目まで全部決まりましたね。
1ビット目:0
2~4ビット目:010
5~15ビット目:101000111101
これをつなげれば浮動小数点表示になります。
お分かりになりましたか?
 
^2)*8^(-2)
    • good
    • 0

#2です。



A#2の最後の行

>^2)*8^(-2)
は消し忘れのごみです。削除願います。

失礼しました!
    • good
    • 0

うん, 多分誰にもわからないと思うよ.



「かさあげ表現」でどれだけ「嵩上げ」されてるかわからん.
    • good
    • 0

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