2

この質問はおそらく愚かまたはパラノイダルですが、とにかく:-)。次のコードが与えられます:

DWORD hiRes;

// will overflow about once in an hour
hiRes = GetTickCount() * 1193L;

定期的にオーバーフローし、そのような状況が適切に処理されることがわかっている場合hiRes、このコードに何か問題がありますか?

更新:hiRes答えはC標準で定義されている(符号付きまたは符号なし) のタイプに依存するため、結果は私にとって非常に驚くべきものです(たとえばを参照)。

4

2 に答える 2

6

オーバーフローunsigned intは安全です。署名されたものをオーバーフローさせることはありません(未定義の動作)。

MSDNによると:

DWORDは、32ビットの符号なし整数(範囲:0〜4294967295 10進数)です。このタイプは次のように宣言されます。

typedef unsigned long DWORD

だからそれは安全なはずです。

于 2011-08-07T09:04:06.140 に答える
1

符号なし整数は安全ですが、符号付き整数は安全ではありません。しかし、明らかな2の補数を実行しないプラットフォームに出くわしたことはありません。私は、人々が弾丸を噛み、それを義務化した基準を望んでいます。

于 2011-08-07T09:07:14.023 に答える