アプリ版:「スタンプのみでお礼する」機能のリリースについて

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

A 回答 (3件)

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
ですね。
    • good
    • 0
この回答へのお礼

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

お礼日時:2001/07/23 17:57

2の補数表記にすると、何バイトのデータかによって答えが違ってきますね。

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

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


どうですか?

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

実際にやってみると、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;
}

# 反則?
    • good
    • 0

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