ループ内のcount++について

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
SG

ループ内のcount++について

#1

投稿記事 by SG » 15年前

いつもお世話になっております。
タイトルの件で質問させていただきます。
C言語は苦Cさんを一通り目を通したというレベルです。

http://dixq.net/g/45.html
のページのcountや龍神録のキャラ描画関数
void calc_ch(){
        ch.cnt++;
        ch.img=(ch.cnt%24)/6;
}
のch.cntは一秒間に60ずつ増えるという理解をしているのですが
(ここからすでに間違っている可能性もありますが)
これらの定義がintということはcountやch.cntが2147483647に達すると
オーバーフローするのでしょうか?

ゲームは別に止まらないので自分の思い違いかと思うのですが
ご解説いただけますと助かります。よろしくお願いいたします。 画像

Poco

Re:ループ内のcount++について

#2

投稿記事 by Poco » 15年前

オーバフローしますよ。

#ゲームが止まらないのが運が良いせいのか、計算ずくなのかはわかりません。

SG

Re:ループ内のcount++について

#3

投稿記事 by SG » 15年前

なるほど、ありがとうございました。
しかし回答をお聞きしてからよくよく計算すると結構な時間ですね。
ゲーム止まらないと申し上げましたが嘘でした。流石にこの長時間は確認していませんでした。
対策する必要のない十分な時間ということですか。

Poco

Re:ループ内のcount++について

#4

投稿記事 by Poco » 15年前

> ゲーム止まらないと申し上げましたが嘘でした。流石にこの長時間は確認していませんでした。

ソースがあるので、初期値を書き換えちゃえば、すぐにも確認できますよ。


> 対策する必要のない十分な時間ということですか。

おそらくそういう設計なのでしょうね。

Dixq (管理人)

Re:ループ内のcount++について

#5

投稿記事 by Dixq (管理人) » 15年前

60(フレーム)*60(秒)*60(分)*24(時間)*365(日)=約18億
と言う事で、1年間ゲームをつけっぱなしでもその値にはならないので、特に気にせずに実装しました。
ただカウンタ関係はunsigned intが良いですね。

SG

Re:ループ内のcount++について

#6

投稿記事 by SG » 15年前

ぽこさん、 Dixqさん

ご丁寧な回答ありがとうございました。
結果的には問題ないとのことですが、やはり私としては
オーバーフローする可能性があるということを知っておくのと
知らないのではだいぶ差があると考えております。
すっきりしました。

しかし初期値書き換えなどの発想はパッとは出てきません、ナカナカ・・
プログラムは奥が深いですね

閉鎖

“C言語何でも質問掲示板” へ戻る