清除使用8位数据类型从0到255计数的代码

rve*_*rve 8 c embedded microcontroller

我想知道是否有一种使用8位数据类型从0到255计数的简洁方法,如:

for(uint8_t i(0);i<=255;++i)
{
    ....
}
Run Code Online (Sandbox Code Playgroud)

这显然不起作用,但它清楚地表明你想从0到255计数.

一个有效的解决方案是:

uint8_t i(0);
do
{
    ...
    ++i;
}
while(i > 0);
Run Code Online (Sandbox Code Playgroud)

但是在这里它根本不清楚从0到255的数量.

这也可以,但它只是丑陋恕我直言:

uint8_t i(0);
while(true)
{
    ...
    if (i == 255)
    {
        break;
    }
    ++i;
}
Run Code Online (Sandbox Code Playgroud)

所以我想知道,有没有一种干净的方法来做到这一点,而不使用更大的数据类型?

编辑:

  • 我喜欢使用for的版本,因为它使得它的意图清晰而不考虑:从0循环到255.所有其他版本需要考虑一下发生了什么,因此更容易混淆其他版本.
  • 我不想使用int,因为代码是用于内存不多的8位微控制器.

ot.*_*ot. 21

关于什么:

uint8_t i = 0;
do {
    ...
} while (i++ != 255);
Run Code Online (Sandbox Code Playgroud)


Rem*_*o.D 8

我不确定你的意思但是

 uint8_t i = 0;

 do {
    ...
 } while (++i & 255) ;
Run Code Online (Sandbox Code Playgroud)

应该按照你的要求做,并明确引用255(如果你的编译器是C99标准而uint8_t真的是8位则无用).

  • +1我喜欢这个!我甚至可以删除255:`uint8_t i = 0; 做工作(); } while(++ i);` (6认同)
  • @paxdiablo:可悲的是,我看到编译器对类型有一些自由.希望这不再是这种情况,人们可以相信uint8_t在255之后向上舍入为0 :).实际上一个好的编译器应该消除和0xFF,所以留下它不会有害(以防万一)...... (3认同)

Dip*_*ick 5

显而易见的是什么问题?

i = 255;
do {
 work();
} while (i--);
Run Code Online (Sandbox Code Playgroud)

  • 它出什么问题了?事实上,你倒数,他的要求说0到255. (4认同)
  • @senfo:所以用~~ i替换循环中`i`的所有用法.没问题! (3认同)