- ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:基数による浮動小数点表示での計算について)
基数による浮動小数点表示での計算について
このQ&Aのポイント
- 基数による浮動小数点表示での計算について質問があります。
- 質問文章では、SW-H20の問題として、基数変換に関する疑問が述べられています。
- 具体的には、16進数を定義に変換する際に、先頭の数値がどこにいってしまったのか疑問が生じています。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
最初の問題 45BF0000 の最初の1バイトを2進数に変換します。 01000101 ここで、頭の0は符号ビットなので、この数字は正の数字。 残りの7ビットで指数部を表すのですが、指数の表記は 2^(e-64) なので、64(2進数:01000000、16進数:40)を引いてやります。 すると +0.BF0000*2^5 になります。 同じように、二つ目 41300000 頭のビットは0、指数部は41、41から40を引いて1、結果として +0.300000*2^1 になります。
その他の回答 (1)
- edomin7777
- ベストアンサー率40% (711/1750)
回答No.2
#1です。 0.300000_16 × 2 = 0.030000_16 × 2^5 の説明が抜けていました。 左式を右式にするには、2^4=16^1を考えればOKです。 指数が増えると、小数点はその分左に移動します。 2^1から2^5に変更するときは、2進数で小数点が左に4桁分移動するので、2進数では 0.0101000000000000*2^1 ↓ 0.0000010100000000*2^5 になります。 これを16進数に直すと、 0.300000*2^1 ↓ 0.030000*2^5 になります。 2進数で4桁分移動させているので、16進数では1桁分の移動になっています。 実際の問題は、この2数の加算なので、 0.BF0000_16*2^5 0.030000_16*2^5 ------------------ 0.C20000_16*2^5 符号は(+)で指数が(5)、下駄(64)を履かせて指数部は(45)になるので、 45C20000 となり、答えは(イ)が正解。
お礼
さっそくのご回答ありがとうございます。 ビットまで落として考えるのですね、そこまではしていませんでした。 >45BF0000 >の最初の1バイトを2進数に変換します。 >01000101 で、左1ビットが符号ビット、残りの7ビットが指数ビットで、 7ビット部分は、45_16、ここで40_16を引くと、5になる、ということですね。 (私は、1000101_2から、64の下駄履き部分の1000000_2を引くと、残りは0000101_2、つまり5_10となる、と考えてみました) 二つ目の、0.30000_16 × 2も、16進数なので、小数点の位置が一つずれる→2^4倍する→00.3000_16 × 2^5ということでよいでしょうか。 基数変換は苦手なので、助かりました。 ありがとうございました。
補足
>それぞれ、先頭の45や41はどこにいってしまったのでしょうか? についてですが、 45や41は、符号ビットと指数部なので、最初の1バイトは消えるのですね。 いきなり消えた(ように見えた)ので戸惑ってしまいました。 おかげでスッキリしました。 ありがとうございました。