对于具有字节计数器的循环在开始时挂起

时间:2015-10-02 13:17:32

标签: c# visual-studio loops for-loop

这是一个非常简单的for循环:

for (byte i = 0; i <= 255; i++)
{
    //do something
}

循环在我变为0后循环挂起,直到视觉工作室最终停止运行,但为什么?

如果我将计数器类型更改为int,则效果非常好。

3 个答案:

答案 0 :(得分:13)

您的字节在255处溢出。如果您在循环中打印i,请执行以下操作:

for (byte i = 0; i <= 255; i++)
{
    Console.WriteLine(i);
}

您将看到如下输出:

...
253
254
255
0
1
...

字节的最大值为255,因此i <= 255永远不会变为false。将您的条件更改为i < 255以解决无限循环。

答案 1 :(得分:8)

那是因为表达式i <= 255对于一个字节总是为真。由于255是可以存储在一个字节中的最高值,因此没有值可以使表达式为false。

当增加值255时,它会溢出并变为0

答案 2 :(得分:3)

如果i <= 255的值大于255,则表达式i才有意义。当循环体执行i == 255时,i会递增。理论上它的值是256,但是它比可以存储在一个字节中的值大,所以它的值被截断(想想加法模256)并变为零。这仍然小于255,因此循环再次运行。