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

Ash*_*ani 1 c# loops for-loop visual-studio

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

for (byte i = 0; i <= 255; i++)
{
    //do something
}
Run Code Online (Sandbox Code Playgroud)

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

如果我将计数器类型更改为int,它可以完美地工作.

use*_*963 14

您的字节在255处溢出.如果您i在循环中打印如下:

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

您将看到如下输出:

...
253
254
255
0
1
...
Run Code Online (Sandbox Code Playgroud)

字节的最大值为255,因此i <= 255永远不会变为false.改变你的条件来i < 255解决无限循环.


Guf*_*ffa 8

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

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