这是一个非常简单的for循环:
for (byte i = 0; i <= 255; i++)
{
//do something
}
循环在我变为0后循环挂起,直到视觉工作室最终停止运行,但为什么?
如果我将计数器类型更改为int,则效果非常好。
答案 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,因此循环再次运行。