トップページ > 過去ログ > 記事閲覧
キャストについて
名前:ZER0 日時: 2008/01/12 15:46

初めまして、変な質問ですいません。 例えば 「unsigned int i」 「i=4294967295+3」とすると桁あふれ 「i=(unsigned int)4294967295+3」正常終了なのですが、 これでオーバーフローを防げているのでしょうか? 問題のすり替えになっていそうで心配なので お答え頂けたら幸いです。

Page: 1 |

Re: キャストについて ( No.1 )
名前:ライブラリ使用者 日時:2008/01/12 16:18

どうなのでしょうね。。 詳しい事は分かりかねますが、やはりlongを使用するのが望ましい気がします。 もし、その表記で問題ないとしても次にそのiを使用する場合などにまた桁あふれなどを考慮しなければならないのは不毛だと思います。 (回答という答え方でなく、申し訳ないです)
Re: キャストについて ( No.2 )
名前:ZER0 日時:2008/01/12 16:51

お返事ありがとうございます。 使い道は色々あるのですが、 時間取得の計算などオーバーフローを利用して 求められたら良いなぁと思ったからです。 ネット対戦できるようにするので パソコンをずっとつけている場合でも 安全に実行さたいです。 それとすいません //そのiを使用する場合などにまた桁あふれなどを考 慮しなければならないのは不毛だと・・・とは、 どのような場合でしょうか? キャストによって計算結果はunsigned int になりますよね? ・・・間違っていますでしょうか?
Re: キャストについて ( No.3 )
名前:ZER0 日時:2008/01/12 17:10

すいません。 すぐ上の補足です。 「unsigned int に切り捨てられますよね?」ということです。
Re: キャストについて ( No.4 )
名前: 日時:2008/01/12 19:14

キャストするというのはコンパイラを騙す行為に 他なりません。 unsigned int i; i = (unsigned int)4294967295 + 3; ビットでフローをあらわしてみましょう。 i -> 0000 0000 h 4294967295 -> FFFF FFFF h 3 -> 0000 0003 h 1111 1111 1111 1111 1111 1111 1111 1111←FFFF FFFF の2進表記 + 0000 0000 0000 0000 0000 0000 0000 0011←3の2進表記 --------------------------------------------- 001 0000 0000 0000 0000 0000 0000 0000 0010←計算結果 ~~~←表現範囲を超えるので切捨て ここでの値はi=2になることになります。 >時間取得の計算などオーバーフローを利用して >求められたら良いなぁと オーバーフローが発生することが前提なのは はっきり入ってナンセンスです。 質問の意図がはっきりしませんが、 オーバーフローをさせたくないという趣旨で あっていますか。。。?
Re: キャストについて ( No.5 )
名前:ZER0 日時:2008/01/12 20:02

通さん、お返事ありがとうございます。 >オーバーフローをさせたくないという趣旨で >あっていますか。。。? はいそうです。 この方法ならオーバーフローにならないのですね。 用途は、前に取得した時間と今回取得した時間の 差を出したいが、オーバーフローを回避しつつ、 出来るだけ処理を軽くしたいと思ったからです。 分かりずらくてすいません。
Re: キャストについて ( No.6 )
名前:ライブラリ使用者 日時:2008/01/12 21:44

通さんの方から質問の答えが示されているようなので、いらないかもですが、、 私が指摘した点は、以降の処理においても iを使う計算なり処理をする場合はすべての箇所でキャストしなければならないという点です。 以下に4パターン示しますが、4)はオーバーフローですよね。けれど当然ながら、3)はオーバーしません。 しかしながら、iの値はプログラムから分からないものですからすべて2)のように処理しなければならなくなるだろうという事です。 1) i=0 i+=3 2) i=4294967295 i=(unsigned int)i+3 3) i=3 i+=3 4) i=4294967295 i+=3 最後に補足 4294967295をPC起動時間(秒)で計算しますと。 約139年になります。起動時間をintで取得する際にオーバーフローを考慮する必要性はあまりないかもしれません。
Re: キャストについて ( No.7 )
名前:ZER0 日時:2008/01/12 22:40

ライブラリ使用者さんお返事本当にありがとうございます。 DXライブラリとして時刻取得関数があったのですね。 本当に説明不足ですいません。 自分が使っていたのは「GetNowCount」の方で 49日位でオーバーフローを多分起こします。 ですので、万が一の為でした。 お答え頂いたお二方ありがとございました。 初心者なのでこれからもお世話になるかもしれませんが どうぞよろしくお願いします。

Page: 1 |