从0x0000循环到0xFFFF

Rob*_*ert 6 c# loops for-loop

我想要一个使用UInt16(ushort)循环遍历其所有值的循环.但是,这不会这样做:

for( ushort i = 0; i < UInt16.MaxValue; i++ )
{
    // do something
}
Run Code Online (Sandbox Code Playgroud)

问题是,当i == 0xFFFF而不是"做某事"时,循环将退出.如果我将'for'语句更改为"for(ushort i = 0; i <= UInt16.MaxValue; i ++)",那么它将变为无限循环,因为我永远不会达到0x10000因为ushorts只转到0xFFFF.

我可以使'i'成为一个int并将其转换为或者将其分配给循环中的ushort变量.

有什么建议?

Chr*_*org 17

使用do...while循环

ushort i = 0;
do
{
    // do something
} while(i++ < UInt16.MaxValue);
Run Code Online (Sandbox Code Playgroud)

有一个在顶部或底部测试循环的一个有趣的讨论在这里.


spo*_*son 5

UInt16.MaxValue评估0xffff,而不是0x10000.我认为你可以用do/ whileloop 做这个,作为burkhard1979答案的一个变种.

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