みんなの「教えて(疑問・質問)」にみんなで「答える」Q&Aコミュニティ

こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

16進数に変換して浮動小数点表示

10進数の"-3911.9140625"を16進数にし、正規化して浮動小数点で表示せよ。
という、問題で私が出した答えと、友達が出した答えがことなりました。
私も友達も自分の答えに自身がありません。
どなたか、問いていただけないでしょうか?
なんせ、テストが近いもんで・・・

投稿日時 - 2001-07-19 13:26:15

QNo.106518

すぐに回答ほしいです

質問者が選んだベストアンサー

3911÷16 = 244 ... 7
244÷16 = 15 ... 4
より、3911 = F47(16)

0.9140625×16 = 14.625
0.625×16 = 10
より、0.9140625 = EA(16)

つまり、-3911.9140625 = -F47.EA(16)

これを正規化すれば、-F.47EA×16^2
ですね。

投稿日時 - 2001-07-20 10:03:34

お礼

ありがとうございました。
どうやら、友達の答えの方が正解だったようです。
私は、浮動小数点数の負数の表現には、補数を使うと思って、
3911.9140625 = F47.EA(16) から16の補数を答えだと思ったのですが・・・

投稿日時 - 2001-07-23 17:57:31

このQ&Aは役に立ちましたか?

2人が「このQ&Aが役に立った」と投票しています

回答(3)

ANo.3

2の補数表記にすると、何バイトのデータかによって答えが違ってきますね。また、そのまま桁をずらせなくなります。
(それで私もこの問題を見て???となりました。No.2のpunchan jpさんの回答を見て、ただマイナスをつければいいということにやっと気づきました。)
でも答の形式を指定していないのはちょっと不親切にも思いますね。マイナスのついた16進数ってあまりなじみがないし…

投稿日時 - 2001-07-24 18:14:52

ANo.1

手で計算するのはかったるいので、プログラムを組んでみるというのは
どうですか?

# それとも、そういうプログラムを書け、という問題?

実際にやってみると、4バイトの浮動小数点表記(IEEE形式で良いんですよね?)
だと c5747ea0 、8バイトだと c0ae8fd4 00000000 です。

因みに、こんなプログラム。

#include <stdio.h>

int main()
{
  double a = -3911.9140625;
  float b = -3911.9140625;
  long* x;
  x = (long*)&a;
  printf("8バイト表記だと:%08x %08x\n", x[0], x[1]);
  x = (long*)&b;
  printf("4バイト表記だと:%08x\n", x[0]);
  return 0;
}

# 反則?

投稿日時 - 2001-07-19 14:03:48

あなたにオススメの質問