当我编程时,为什么这个变量的值超过256?

时间:2013-04-06 10:56:18

标签: c#

这是我的代码:

 public void button1_Click(object sender, System.EventArgs e)
    {
        System.Random rnd = new System.Random();
        int ci = 1;
            int di=1;
                int fi=1;
        int c = rnd.Next(1, 254);
        int d = rnd.Next(1, 254);
                for (int f = rnd.Next(1, 254); f < 255; f+=fi)
                {

                    this.BackColor = System.Drawing.Color.FromArgb(c, d, f);
                    Application.DoEvents();
                    if (c == 254 || c == 0) { ci *= -1; }
                    if (f == 254 || f == 0 || f == 50 || f == 100 || f == 150 || f == 200)
                    {
                        d += di;
                    } 
                    if (d == 255 || d == 0)
                    {
                        di *= -1;
                    }
                    if (f==254|| f == 0)
                    {
                        fi *= -1;
                    }
                    if (d == 254)
                    {
                        c += ci;
                    }
                }
     }

弹出的错误是d的值超过256.

然而,当我在调试器中运行它时,我看不到d将超过256的任何情况。当d为255时,di变为负,因此d + = di将减小d的值。因此,d不可能超过255.因此,当调试器告诉我d刚刚达到256时,这是令人困惑的。

有人可以向我解释为什么会这样吗?

1 个答案:

答案 0 :(得分:4)

假设f在内循环中永远不会超过254,d是255。

第一次执行以下代码时,di将变为否定。但是,由于最里面的循环继续执行d没有改变,所以在下一次通过最里面的循环d时,仍然 255,所以这个条件设置di回到正面。

if (d == 255 || d == 0)
{
    di *= -1;
}

我认为以下内容更接近您对包含variable *= -1;的每个块的意图(具体使用d):

if (d == 255)
{
    di = -1;
}
else if (d == 0)
{
    di = 1;
}