2016-12-14 9 views
2

私はuint32カウンタを持っています。私はこのカウンターを読んで、それを保存しますstartCount = counter; 次に私はいくつかの操作を行い、そして再びカウンターをチェックします。 counterがstartCount + 1より大きい場合(平均カウンタを少なくとも2回インクリメントする必要があります)。リセットするカウンタとの比較

if (counter > startCount +1) 
    break; 

カウンタは、unit32の最大値に達するとゼロにリセットされます。それを行うには良い/よりスマートな方法があります:?私の質問があり、私は

if (startCount == Max) 
    if (counter > 0) 
    break; 
else 
    if (counter > startCount +1) || (counter < startCount) 
    break; 

を追加し、これを補うために ありがとうございました。

+0

をカバーする必要があります。 'startCount == UINT23_MAX'でも' counter> 0'は 'counter> startCount + 1'と等しくなることに注意してください。しかし、一般的には、「よりスマートにする方法」についてのアドバイスは、なぜあなたが最初にそれを行うのかを示す必要があります。 – StoryTeller

+0

カウンタが内部で、タイプを変更できません。私は少しcomparsionと非常に良いと私はこのコードのブロックがいくつかのexpreienceプログラマがsimilarの問題に直面しているかもしれないと考えて、単一のステートメントに減らすことができるかどうか疑問に思っていた。 –

答えて

0

ちょうど下にこれをチェックすると、あなたは両方のための `uint64_t`を使用しますが、操作は` UINT23_MAX`を法プリフォームすることができ、すべて

if (counter > startCount +1) || ((counter != startCount) && (counter < startCount +1)) 
    break; 

`

+1

ofcourseこれは、少なくとも1つの増分があることを前提としています。あなたのケースでは最適ではないかもしれませんか? –

関連する問題