【问题标题】:Comparing to a counter which reset与重置的计数器相比
【发布时间】:2016-12-14 09:20:45
【问题描述】:

我有一个 uint32 计数器。我读了这个计数器并将其存储为startCount = counter; 然后我做了一些操作,然后再次检查计数器。如果 counter 大于 startCount+1(意味着 counter 必须至少增加两次)。

if (counter > startCount +1 )
  break;

现在,一旦达到 unit32 的最大值,计数器将被重置为零。 为了弥补这一点,我添加了

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

我的问题是:有没有更好/更聪明的方法来做到这一点? 感谢大家的帮助。

【问题讨论】:

  • 您可以对两者都使用uint64_t,但要执行以UINT23_MAX为模的操作。您还可以注意到,即使startCount == UINT23_MAXcounter &gt; 0 仍将等同于counter &gt; startCount +1。但一般来说,就“如何做更聪明的事情”提出建议时,您首先需要说明为什么要这样做。
  • 计数器是内部的,我无法更改类型。我不太擅长位比较,考虑到一些经验丰富的程序员可能面临类似问题,我想知道是否可以将这段代码简化为一条语句。

标签: c++ c logic counter


【解决方案1】:

只需检查下面的内容即可涵盖所有内容

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

`

【讨论】:

  • 当然这是假设至少有一个增量..在您的情况下可能不是最佳的?
【解决方案2】:

我会使用

if (counter-startCount > 1) break;

或者,如果我想允许 int 具有超过 32 位,

if ((uint32_t)(counter-startCount) > 1) break;

增量数以 2 为模32

【讨论】:

    猜你喜欢
    • 2016-03-01
    • 2014-10-06
    • 1970-01-01
    • 2015-10-04
    • 2017-04-13
    • 2011-06-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多