【问题标题】:For loop with byte counter hangs at start带有字节计数器的循环在开始时挂起
【发布时间】:2015-12-30 17:11:49
【问题描述】:

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

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

i 变为 0 后的循环一直挂起,直到 Visual Studio 最终停止运行,但为什么呢?

如果我将计数器类型更改为 int,它会完美运行。

【问题讨论】:

  • @remove 做某事并运行为:for (byte i = 0; i &lt;= 255; i++);

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


【解决方案1】:

表达式i &lt;= 255 仅在i 的值大于255 时才有意义。当i == 255 循环体执行时,i 会递增。名义上它的值是 256,但这比一个字节可以存储的要大,所以它的值被截断(考虑加法模 256)并变为零。这仍然小于 255,所以循环再次运行。

【讨论】:

    【解决方案2】:

    您的字节在 255 处溢出。如果您像这样在循环中打印 i

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

    你会看到这样的输出:

    ...
    253
    254
    255
    0
    1
    ...
    

    一个字节的最大值是 255,所以i &lt;= 255 永远不会变成假。将条件更改为i &lt; 255 以解决无限循环。

    【讨论】:

      【解决方案3】:

      这是因为表达式i &lt;= 255 对于一个字节始终为真。由于255 是一个字节中可以存储的最大值,因此没有任何值可以使表达式为假。

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

      【讨论】:

      • 我想到了溢出,但我预计会出现抛出异常之类的错误
      • @Failure:溢出默认不会引发异常,可以使用checked keyword强制进行溢出检查。
      猜你喜欢
      • 2015-03-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多