ページ 11

GetTickCountなんですが

Posted: 2011年6月03日(金) 15:44
by first
GetTickCountでwindowsの起動してからの時間何時間何分何秒という表示の仕方にしたいのですが

ネットで調べてみると見つけたのですがわからないところがあったので教えていただけないでしょうか

void DoGetTickCount()
{
DWORD t;

t = GetTickCount();

printf("Windows 起動から %d日 %d時間 %d分 %d秒 経過",
t/86400000,
(t/3600000)%24,
(t/60000)%60,
(t/1000)%60
);
}

このプログラムの

t/86400000, (t/3600000)%24, (t/60000)%60, (t/1000)%60の部分なのですが

どうして「%」なのでしょうか?

「/」でやってみたのですが変な表示のされかたでした

よろしくお願いします

Re: GetTickCountなんですが

Posted: 2011年6月03日(金) 15:53
by hidden
%演算子は割ったあまりを求めるものです。

90秒は1分と30秒ですね。
このとき30秒であることを求めるために
90%60 の結果が 30 (90を60で割ると1あまり30)であることを利用します。

Re: GetTickCountなんですが

Posted: 2011年6月03日(金) 16:08
by first
hidden さんが書きました:%演算子は割ったあまりを求めるものです。

90秒は1分と30秒ですね。
このとき30秒であることを求めるために
90%60 の結果が 30 (90を60で割ると1あまり30)であることを利用します。
お答えいただいたのにすみません
それでしたら(t/3600000)%24でいうと余りだけ表示されてしまうんじゃないんですか?

Re: GetTickCountなんですが

Posted: 2011年6月03日(金) 16:25
by さかまき
>それでしたら(t/3600000)%24でいうと余りだけ表示されてしまうんじゃないんですか?
余りだけ表示したいからです。

コード:

(t/3600000) = 起動からの時間(時)なので

0 1 2 3 ... 22 23 24 25 26 27 28 ... 46 47 48 49 50 ...
となります。24時、48時、72時・・・で0時に戻したいでしょ?
なので、これを %24(24で割った余りを求める)すると
0 1 2 3 ... 22 23  0  1  2  3  4 ... 22 23  0  1  2 ...
になり24時間表示になります。
以下同様に
(t/60000) = 起動からの分
(t/1000) = 起動からの秒

Re: GetTickCountなんですが

Posted: 2011年6月03日(金) 16:45
by さかまき
というか、hidden さんの以下の説明
>90秒は1分と30秒ですね。
>このとき30秒であることを求めるために
>90%60 の結果が 30 (90を60で割ると1あまり30)であることを利用します。

をちゃんと読んだ上で
>それでしたら(t/3600000)%24でいうと余りだけ表示されてしまうんじゃないんですか?
という疑問をもたれたのでしょうか?だとすれば掲示板で説明は難しいです。

Re: GetTickCountなんですが

Posted: 2011年6月03日(金) 22:34
by first
そういうことなんですね

わかりました

hiddenさん
さかまきさん
ありがとうございました