C# 为什么这个变量的值会超过256,而我将其编程为不超过256?

C# 为什么这个变量的值会超过256,而我将其编程为不超过256?,c#,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.Nex

这是我的密码:

 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;
                    }
                }
     }
public void按钮1\u单击(对象发送者,System.EventArgs e)
{
System.Random rnd=新的System.Random();
int-ci=1;
int di=1;
int-fi=1;
INTC=rnd.Next(1254);
int d=rnd.Next(1254);
for(intf=rnd.Next(1254);f<255;f+=fi)
{
this.BackColor=System.Drawing.Color.FromArgb(c,d,f);
Application.DoEvents();
如果(c==254 | | c==0){ci*=-1;}
如果(f==254 | | f==0 | | f==50 | | f==100 | | f==150 | | f==200)
{
d+=di;
} 
如果(d==255 | | d==0)
{
di*=-1;
}
如果(f==254 | | f==0)
{
fi*=-1;
}
如果(d==254)
{
c+=ci;
}
}
}
弹出的错误是d的值超过256

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


有人能解释一下为什么会发生这种情况吗?

假设
f
在内部循环中不能超过254,而
d
是255

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

if (d == 255 || d == 0)
{
    di *= -1;
}
我相信下面的内容更接近您对包含
变量*=-1的每个块的预期内容(我特别使用了
d
):


假设
f
在内部循环中永远不能超过254,并且
d
是255

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

if (d == 255 || d == 0)
{
    di *= -1;
}
我相信下面的内容更接近您对包含
变量*=-1的每个块的预期内容(我特别使用了
d
):


您打算如何结束
for
循环?您是否认为标准
<255
很重要?假设最内部的
for
循环永不结束。那么
的外部
循环是如何相关的呢?你是对的,它们是多余的。我现在删除了它们。问题仍然存在。你能编辑你的代码以反映其最新状态并重新发布吗?(当你对其他人的评论发表评论,并且某个人不是该帖子的作者时(回答/问题),您应该使用一个
@
,后面跟您谈话的人的尼克。这样,接收者将收到您对其评论的通知。)@user2108462 Random。接下来(1254)将生成范围为1..253的值。这就是您的意图吗?您是如何结束
for
循环的?您是否认为标准
<255
很重要?假设最内部的
for
循环永不结束。那么
的外部
循环是如何相关的呢?你是对的,它们是多余的。我现在删除了它们。问题仍然存在。你能编辑你的代码以反映其最新状态并重新发布吗?(当你对其他人的评论发表评论,并且某个人不是该帖子的作者时(回答/问题),您应该使用一个
@
,后面跟您谈话的人的尼克。这样,接收者将收到您对其评论的通知。)@user2108462 Random。接下来(1254)将生成范围为1..253的值。这就是你想要的吗?啊哈!我现在明白了。由于在执行di*=-1之后d+=di的条件并不总是满足,因此当满足d+=di的条件时,di有可能再次更改为1。谢谢,啊哈!我现在明白了。由于在执行di*=-1之后d+=di的条件并不总是满足,因此当满足d+=di的条件时,di有可能再次更改为1。非常感谢。