この人頭いいなと思ったエピソード

03分22秒36のような時間の単位を16進数で表すと、どうなりますか?
また、どうしてそのようになるのか、その変換の過程も教えてください。
お手数ですが、どうぞよろしくお願いします。

質問者からの補足コメント

  • うーん・・・

    ご回答の数々、ありがとうございました。

    実は、とあるプログラム上で質問の時間表記があり、その箇所のバイナリを確認したら、
    0C 04だったので、なぜ、このような表記になるのか、今回の質問をさせていただきました。

    説明不足だったようで、大変申し訳ございませんでした。

      補足日時:2017/03/31 17:04

A 回答 (6件)

私がプログラムを作るならば、ですが、静的に時間を表記するだけで計算式にも一切使わないのであればNo.3の方のように、時、分、秒、その下の位のそれぞれの座の数値をそれぞれ独立したビットの座で表現します(例えば分、秒をそれぞれ6ビット、秒の小数点以下を7ビットで表現し、これをくっつけて表現します)。

またストップウォッチのように時間をカウントするのであれば、単位時間の積み重ね(ご質問文の時間表記だと、単位時間を100分の1秒とか)で表現します。

前者の場合、ただ画面に表示するだけの目的ぐらいにしか使えませんが、取り出したい座のビットマスクとの論理積とシフト演算だけで時、分、秒等の数字を取り出すことが容易です。しかし、足し算やインクリメントなど計算を伴うと、繰り上がりや繰り下がりを実現するために条件分岐が多発するため効率よくありません。
後者の場合、インクリメントや足し算などは容易に行うことができます。時、分、秒などを取り出すのは前者ほど単純ではありませんが、それにしても四則演算のみで取り出すことができるため条件分岐を多用する必要がなく、それほど効率の悪いものでもありません。

しかし、03分22秒36を 0C 04 ですか・・・これはちょっとわかりませんね。
後者の表記法にて単位時間を100分の1秒とすると、03分22秒36は単位時間の積み重ねだと10進数で20236(202.36秒)ですが、これを16進数で表現すると 4F 0C になります。インテル系CPUのバイトオーダーでは 0C 4F 00 00 (32ビットの場合)な感じにメモリに格納されると思います。見間違えているとか、実は3分22秒36とは違う時間だった、ってことはないですよね。
    • good
    • 1
この回答へのお礼

懇切丁寧なご回答、ありがとうございました。

>しかし、03分22秒36を 0C 04 ですか・・・これはちょっとわかりませんね。

正に仰せの通りなので、今回の質問をさせていただきました。
以前にも何度か該当箇所を確認してみましたが、”0C 04”
なので、ずっと、納得がいかなかったのですが、今回のお答えをいただき、とりあえずスッキリいたしました。

また、他のご回答をいただきました皆様、大変お世話になりました。この場をお借りして、お礼申し上げます。

お礼日時:2017/04/04 08:47

プログラム?


どういう言語かとか、変数・定数とか、固定小数点とか浮動小数点とかで内部表現形式が違うから、そのプログラム言語のスペックを見ないと解らない。

1月1日0時0分を起点とした累積分を固定小数か浮動小数のどちらで表すかによっても違うし、秒の累積で表現するとか、別の規則で表現するかとか、色々方法があるから、質問の内容からでは何とも特定不可能。
    • good
    • 0

16進数であらわすといってもいろいろ有りますから、


0.01秒を1として扱う?1日を1として扱う?などいろいろ出来てしまうのでどうするのかによって変わります。
    • good
    • 0

まず16進法とは何か?を考えた場合、1桁で扱える最大が15ですね?


15を超えると繰り上がりが発生し、0x10となります(=16)

 では、時間を表現するとどうなるか?

 午前0時から午前9時まではそのままとして、午前10時は0x0a時。
 同様に、午前11時は0x0b、午前12時は0x0c時。

 この考えを当てはめていけば16時は0x10時ですね。

 時・分・秒の表し方の意味をどうするか?になります。

>03分22秒36
 をこのまま置き換えていくと、0x03分0x16分0x24になりそうです。

※0x(ゼロエックス)・・・としているのは16進数表記を意味しています。
    • good
    • 0

回答は#1の方が言われてますので、その通りなのですが、


どうしてそのような質問をされたのか、非常に興味があります。
さしつかなければ、そのような質問をされた理由、背景などを教えていただけませんでしょうか。
    • good
    • 0

それは無理、例えばn進数のabcdはan³+bn²+cn+dの事。


10進数ならn=10で16進数ならn=16。

時間の単位でabcdで日、時、分、秒を表したとすると
aの桁は日だから、重みは10、bは時間だから、重みは24、cやdは分、秒だから重みは60。
各桁の重み(基数)が違うのだから、重み一定の16進数表記へは変換出来ない。
    • good
    • 0

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


おすすめ情報