OCN光で最大124,800円おトク!

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

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

  • うーん・・・

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

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

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

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

このQ&Aに関連する最新のQ&A

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
    • 0
この回答へのお礼

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

>しかし、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で質問しましょう!

このQ&Aと関連する良く見られている質問

Qプログラマー 契約社員

プログラマーとして契約社員で入社した会社で即戦力とならなければ契約満了するケースは多いですか?

育てるという概念は新卒のみに適用で中途入社は即戦力になりえなければ契約満了という形が多いですか?

Aベストアンサー

契約社員は中途入社とは違います。
中途入社でも育てますが、契約社員は使えなければ交換してもらうことは多いです。
まぁ年齢とかその人の資質にもよりますので一概には言えないと思いますが。

QC言語の漢字のホルダーは、chdirでは変更出来ないのだろうか。

下記のソースでは、ホルダーが漢字で無い時は成功するが。
漢字を使うと失敗する。

下記に成功する場合を示す。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>

int main(){
char *dir1="C:/Users/usui/mingw";
int ret;

ret=chdir(dir1);
printf("%d\n",ret);
}
上記は、漢字を使っていないので結果は0を表示する。
然し、ホルダーに漢字を使うと-1を表示する。

漢字のホルダーを使う方法をお知えて下さい。
宜しくお願いします。

Aベストアンサー

No3です。
ちなみに私がインストールした(今使っているバージョン)のは、下記URLの
mingw-get-inst-20120426.exe です。
https://sourceforge.net/projects/mingw/files/OldFiles/mingw-get-inst/mingw-get-inst-20120426/

QCのプログラムに無性にイライラするのはおかしいですか?

CQ出版のインタフェース 2017-5 の記事のプログラム例に
for( i=0; i<256; i++){
 for( y =0; y < Y; y++ ){
  for( x = 0; x < X; x++){
   p[0] = img -> imageData[img->widthStep* y + x*3 ]; //B(青色)
   if(p[0]==i){hn[i]++;}
  }
 }
}
がありました。このリストを見て、無性にイライラするのは私だけでしょうか?

なぜ、i,y,x の3重のループで処理しないといけないのか、y,xの2重ループで十分ではないかと思います。

for( y =0; y < Y; y++ ){
 for( x = 0; x < X; x++){
  p[0] = img -> imageData[img->widthStep* y + x*3 ];  //B(青色)
  hn[ p[0] ]++;
 }
}

3重にするならせめて、y,x,i の順にしてp[0]への代入は1回で済ませればと思います。

for( y =0; y < Y; y++ ){
 for( x = 0; x < X; x++){
  p[0] = img -> imageData[img->widthStep* y + x*3 ];  //B(青色)
  for( i=0; i<256; i++){
     if(p[0]==i){hn[i]++;}
  }
 }
}

最近のコンパイラの最適化では、私の書いたようなコーディング(修正?)は無意味なのでしょうか?

CQ出版のインタフェース 2017-5 の記事のプログラム例に
for( i=0; i<256; i++){
 for( y =0; y < Y; y++ ){
  for( x = 0; x < X; x++){
   p[0] = img -> imageData[img->widthStep* y + x*3 ]; //B(青色)
   if(p[0]==i){hn[i]++;}
  }
 }
}
がありました。このリストを見て、無性にイライラするのは私だけでしょうか?

なぜ、i,y,x の3重のループで処理しないといけないのか、y,xの2重ループで十分ではないかと思います。

for( y =0; y < Y; y++ ){
 for( x = 0; x < X; x++)...続きを読む

Aベストアンサー

利点を考えてみました


これを並列処理したときに
スレッド0: hn[0] に p[0] = 0 をカウント
スレッド1: hn[1] に p[0] = 1 をカウント
...
とすれば、
・img -> imageData は読み出すだけなので衝突しない
・hn[i] でアクセスする領域は、スレッド毎に i が違うので、同じ箇所に書き込まれることはない。
となり、排他処理が不要となります。
(もちろん、x,y,i,p[0]はスレッドでローカルな変数とします)

ただ、並列処理のオーバーヘッドや同時並列処理数等を考えると、こんな並列処理はしない方が効率的です。


あるいは、hn[]がシークに時間がかかる領域の場合、
hn[p[0]) で毎回違う位置を探しに行って、その時間が無視できないほどだったら、
先にhnを決めてしまった方が速くなるでしょう。

こちらも、非現実的です。

QC言語 a * b / c の計算

特に困っているわけではないのですが、エレガントな方法が見つからないので質問します。

a,c は32ビット、bは8ビット、0<a≦c、0<b がわかっているとします。
このとき、8ビットの整数計算値 a * b / c を「最大32ビットの範囲」で計算する方法、教えてください。
一応C言語で考えていますので、以下の***の部分の具体的な計算方法がわかればうれしいです。

int a,c; // 32bit 符号付き整数
signed char b,d; // 8bit 符号付き整数
if(a<2^(32-8)) d = a * b /c;
else **** ← この部分のプログラム

Aベストアンサー

決してエレガントではありませんが、a, cは正でありしかし符号付の型だという前提で a * b / c の整数の商を求めるのであれば、最初にa - cを求めて一時変数に代入しておき、bの数だけループし、ループ中に一時変数にaを加え、それがc以上になったらdを1加えて一時変数からcを引き去ることを繰り返せば、間違いなくすべての数値は32ビット以内に収まると思います。CPUにALUしかない時代の発想で、歳がばれますね・・・

Qプログラムを覚えるのに、練習問題のコードを、チラシの裏に手書きで書いて覚えようとしているのですが、キ

プログラムを覚えるのに、練習問題のコードを、チラシの裏に手書きで書いて覚えようとしているのですが、キーボードで打って覚えた方が良いでしょうか?

Aベストアンサー

個人的すぎる感想ですが、紙に書いても良いと思います。

 同じ紙に書くならばフローチャートも併せてどうぞ。

Qc言語は独学で、どこまで出来ますか?

大学生です。初歩的なc言語を学ぶ講義があるのですが、訳あって受けられなくなったので、独学でいこうかなと思っています。

初心者の大学生が1年程度受ける講義の内容は、独学でも難しいですか?

独学経験者、プログラミングに詳しい方の意見を伺いたいです。

Aベストアンサー

それは大丈夫でしょう。
最初はC言語入門的な書籍から入ってもいいし、真髄を学びたければカーニハン&リッチーの定番から読むのもいいし、プライマーから入ってもいいし。

ただ、コードを書くだけではダメなので、構造化プログラミングとか、コンパイラとか、ゆくゆくはオブジェクト指向とかに入っていかないといけません。

Qプログラムの改良

人の作ったプログラムを改良することになりました。
Visual C++ は初めてですが、CやC++は一通り勉強しています。

そこで、いろいろ調べているのですが、
例えば
「MFCは使わずに,Win32API SDKを用いた方法」
などという説明があります。

自分が対応しているプログラムが、そのどちらであるか、あるいはほかの方法で作られているか
というのはどうしたら分かるのでしょうか?

Aベストアンサー

No1です
私はC++は全然触ったこと無いので
あまり的確な回答は期待しないでくださいね

Q1.いいんじゃないでしょうか?
MSDNのOnPoint↓
https://msdn.microsoft.com/ja-jp/library/01c9aaty.aspx

OnPointクラス(Cwndクラス)
https://msdn.microsoft.com/ja-jp/library/1xb05f0h.aspx
このページの一番最初に
「Microsoft Foundation Class ライブラリにあるすべてのウィンドウ クラスの基本機能が用意されています。」と書いてありますから
そういうことですね

Q2.なんでもいいと思いますけど
そもそもあなたが対応するプログラムが
きちんとWin32のみで、もしくはMFCのみで書かれているとは限らないですからね
適当に作られて、両方が混在している可能性だってありますし

Q3.そこからですか
そこは調べればすぐ出てくるかと思いますが
MFCというのはWin32をラッピングしたものです

Q4.作った本人に聞く
仕様書とかがあるならそれを見る

No1です
私はC++は全然触ったこと無いので
あまり的確な回答は期待しないでくださいね

Q1.いいんじゃないでしょうか?
MSDNのOnPoint↓
https://msdn.microsoft.com/ja-jp/library/01c9aaty.aspx

OnPointクラス(Cwndクラス)
https://msdn.microsoft.com/ja-jp/library/1xb05f0h.aspx
このページの一番最初に
「Microsoft Foundation Class ライブラリにあるすべてのウィンドウ クラスの基本機能が用意されています。」と書いてありますから
そういうことですね

Q2.なんでもいいと思いますけど
そもそもあなたが...続きを読む

QC言語はどこまでゲームを作り込むことができますか?

ゲームを作っているのですが、使用しているソフトではパフォーマンスに少し満足できません。
なのでC言語を学ぼうと思ったのですがC言語は、例えばACTが作れるとか、どのくらいまで作れるとか。
逆にRPGとかは作れないみたいな、そういった限界がどこまであるのかわかりますか?

Aベストアンサー

C言語に限界はありません。
限界は、プログラマの方にあります。
C言語に変えたら全て解決、といった単純な話ではありませんので、覚悟してください。


CPUは、機械語しか理解できません。
全てのプログラムは、機械語に翻訳されるか、「プログラミング言語を解釈して実行するプログラム」を使って実行されます。

C言語は、大体前者で、しかも、 機械語とほぼ同等なことができるように作られています。
なので、原理的には、今あるコンピュータゲームは、ほぼ全てC言語で作ることができる、となります。


ですが、あなたが言う「作れる」とはニュアンスが違うと思います。

C言語自体は、とても低機能です。
そのツールが持っているような機能、例えば「画面にキャラクターを表示する」といったものはありません。
「水平に弾を発射」と設定すればいいだけのものが、
「一定時間毎に座標を少しずつ変化させて表示。画面外に出たら廃棄」
といった感じの、細かく分解する必要があります。
(これでも不十分で、「一定時間毎」ってどうやる?「画面外」とは?等と、より細かく分解しなければなりません)

結局、C言語で作る、ということは、「今使っているツールと同じようなものを自作する」のと同じことです。


また、C言語は速い、と誤解されているようです。
「無駄を省く等のチューニングができる場合がある」から「速くなるかもしれない」だけです。
そのツールでも、パフォーマンスは考慮されているでしょう。
C言語で書いても、何の対策もしていないなら、ツール以下のパフォーマンスになることもあります。

C言語に限界はありません。
限界は、プログラマの方にあります。
C言語に変えたら全て解決、といった単純な話ではありませんので、覚悟してください。


CPUは、機械語しか理解できません。
全てのプログラムは、機械語に翻訳されるか、「プログラミング言語を解釈して実行するプログラム」を使って実行されます。

C言語は、大体前者で、しかも、 機械語とほぼ同等なことができるように作られています。
なので、原理的には、今あるコンピュータゲームは、ほぼ全てC言語で作ることができる、となります。


です...続きを読む

QC言語で四則演算を使って10を作るプログラム

C言語のプログラミングの問題です。
1桁の整数4つをキーボードから入力して、四則演算で10になる式をすべて出力するという問題で、演算子の優先順位ありで、括弧は使わないとし、数字は入れ替え可能です。
また、プログラムはint型の変数を用いるというものです。
とりあえずは数字入れ替えなしで、次のような力技でソースコードを作ってみたのですが、数字の入れ替えまで考えるとあまりに力技すぎるようなだらだらとしたプログラムになってしまいます。。。
数字の入れ替え可能としてもっと簡単なプログラムを作るにはどのようなソースコードになるのでしょうか。

以下ソースコードです。

#include<stdio.h>
#include<math.h>

int main(void) {

int a, b, c, d = 0;

printf("一桁の整数4つを入力してください。\n");
scanf_s("%d %d %d %d", &a, &b, &c, &d);

if (a + b - c * d == 10)
printf("%d+%d-%d*%d\n", a, b, c, d);
else if (a + b - c / d == 10)
printf("%d+%d-%d/%d\n", a, b, c, d);
else if (a + b * c - d == 10)
printf("%d+%d*%d-%d\n", a, b, c, d);
else if (a + b * c / d == 10)
printf("%d+%d*%d/%d\n", a, b, c, d);
else if (a + b / c - d == 10)
printf("%d+%d/%d-%d\n", a, b, c, d);
else if (a + b / c * d == 10)
printf("%d+%d/%d*%d\n", a, b, c, d);
else if (a - b + c * d == 10)
printf("%d-%d+%d*%d\n", a, b, c, d);
else if (a - b + c / d == 10)
printf("%d-%d+%d/%d\n", a, b, c, d);
else if (a - b * c + d == 10)
printf("%d-%d*%d+%d\n", a, b, c, d);
else if (a - b * c / d == 10)
printf("%d-%d*%d/%d\n", a, b, c, d);
else if (a - b / c + d == 10)
printf("%d-%d/%d+%d\n", a, b, c, d);
else if (a - b / c * d == 10)
printf("%d-%d/%d*%d\n", a, b, c, d);
else if (a * b + c - d == 10)
printf("%d*%d+%d-%d\n", a, b, c, d);
else if (a * b + c / d == 10)
printf("%d*%d+%d/%d\n", a, b, c, d);
else if (a * b - c + d == 10)
printf("%d*%d-%d+%d\n", a, b, c, d);
else if (a * b - c / d == 10)
printf("%d*%d-%d/%d\n", a, b, c, d);
else if (a * b / c + d == 10)
printf("%d*%d/%d+%d\n", a, b, c, d);
else if (a * b / c - d == 10)
printf("%d*%d/%d-%d\n", a, b, c, d);
else if (a / b + c - d == 10)
printf("%d/%d+%d-%d\n", a, b, c, d);
else if (a / b + c * d == 10)
printf("%d/%d+%d*%d\n", a, b, c, d);
else if (a / b - c + d == 10)
printf("%d/%d-%d+%d\n", a, b, c, d);
else if (a / b - c * d == 10)
printf("%d/%d-%d*%d\n", a, b, c, d);
else if (a / b * c + d == 10)
printf("%d/%d*%d+%d\n", a, b, c, d);
else if (a / b * c - d == 10)
printf("%d/%d*%d-%d\n", a, b, c, d);
else {
printf("10になる組み合わせはありません。");
}

return 0;

}

C言語のプログラミングの問題です。
1桁の整数4つをキーボードから入力して、四則演算で10になる式をすべて出力するという問題で、演算子の優先順位ありで、括弧は使わないとし、数字は入れ替え可能です。
また、プログラムはint型の変数を用いるというものです。
とりあえずは数字入れ替えなしで、次のような力技でソースコードを作ってみたのですが、数字の入れ替えまで考えるとあまりに力技すぎるようなだらだらとしたプログラムになってしまいます。。。
数字の入れ替え可能としてもっと簡単なプログラ...続きを読む

Aベストアンサー

No14です。
calcに一部誤りがありましたので、修正しました。
下記URLが正しいソースになります。こちらを使用してください。
http://climbi.com/b/10192/1
不明点があれば、補足してください。

Qこの答えって4じゃないんですか?

この答えって4じゃないんですか?

Aベストアンサー

i を 1から5まで変化させてくりかえす。

i ÷ 2 の余りが 0のとき、sum に i を足す。

なので、
i = 2,
i = 4
のときに加算されるから、6


人気Q&Aランキング