C# 将正整数添加到int会使其变为负整数

C# 将正整数添加到int会使其变为负整数,c#,C#,我的问题是,当我在整数上只加正数时,它有时会变成负数。我知道加在整数上的数字从来都不是正数,因为我试着把它们放进去 maths.abs() 下面是我的代码,我非常感谢您的帮助 int Total = 0; int First = 0; int Second = 10000; while (First <= Second) { Total += 5000 + (250 * First); Console.WriteLine(Total); First++; }

我的问题是,当我在整数上只加正数时,它有时会变成负数。我知道加在整数上的数字从来都不是正数,因为我试着把它们放进去

maths.abs()
下面是我的代码,我非常感谢您的帮助

int Total = 0;
int First = 0;
int Second = 10000;   
while (First <= Second)
{
    Total += 5000 + (250 * First);
    Console.WriteLine(Total);
    First++;
}
Console.ReadKey();
请阅读。您可以选择对算术运算进行边界检查。例如:

int Total = 0;
int First = 0;
int Second = 10000;

while (First <= Second)
{
    checked
    {
        Total += 5000 + (250 * First);
    }

    Console.WriteLine(Total);
    First++;
}
Console.ReadKey();
请阅读。您可以选择对算术运算进行边界检查。例如:

int Total = 0;
int First = 0;
int Second = 10000;

while (First <= Second)
{
    checked
    {
        Total += 5000 + (250 * First);
    }

    Console.WriteLine(Total);
    First++;
}
Console.ReadKey();

正如其他人所提到的,您的int不能接受该数字并溢出。相反,使用Int64可以满足您的需要

Int64 Total = 0;
int First = 0;
int Second = 10000;   
while (First <= Second)
{
    Total += 5000 + (250 * First);
    Console.WriteLine(Total);
    First++;
}
Console.ReadKey();

正如其他人所提到的,您的int不能接受该数字并溢出。相反,使用Int64可以满足您的需要

Int64 Total = 0;
int First = 0;
int Second = 10000;   
while (First <= Second)
{
    Total += 5000 + (250 * First);
    Console.WriteLine(Total);
    First++;
}
Console.ReadKey();

2147483647是整数的极限,在循环的每次迭代中,您将向第一个整数添加1,并溢出整个整数

1 run = 5000 + 0
2 run = 5000 + 5000 + 250
...
10000 run 12,548,750,000
整数无法容纳该值,因此溢出


int64的限制为9223372036854775807。这将适用于您的代码

2147483647是整数的限制,您在循环的每个迭代中向第一个整数添加1,并溢出整个整数

1 run = 5000 + 0
2 run = 5000 + 5000 + 250
...
10000 run 12,548,750,000
整数无法容纳该值,因此溢出



int64的限制为9223372036854775807。这适用于您的代码

您的整数溢出了。您能否解释一下,整数值是否变得太大了,有没有办法解决这个问题?如果使用int.MaxValue+1,您预计会发生什么情况?提示:关注名称MaxValue。C中的int是32位整数。这意味着它只能处理从-2147483648到2147483647的值。仔细检查代码,确保它从未尝试为总计分配超过整数溢出的值。您的代码实际上是整数溢出的一个很好的例子。您正在溢出整数。您能否解释一下,整数值是否变得太大了,有没有办法解决此问题?如果使用int.MaxValue+1,您预计会发生什么情况?提示:关注名称MaxValue。C中的int是32位整数。这意味着它只能处理从-2147483648到2147483647的值。逐步检查代码,确保它从未尝试为总计分配超过该值的值。您的代码实际上是整数溢出的一个很好的示例。这不起作用。System.OverflowException HResult=0x80131516 Message=算术运算导致溢出。@15wshepth它完全按照其预期工作。它将抛出一个异常,而不仅仅是溢出整数。这就是为什么要对其进行检查,以确保您不会执行会溢出总数的操作。它不会悄悄地溢出整数,而是抛出一个异常,以便您可以处理它。不过,您可能想找到一种新的方法来实现这一点。您无法更改32位整数的拟合度,这只是数学…哦,对了,对不起,我没有安静地理解你的回答是什么意思谢谢你的澄清:D。它没有安静地回答问题,因为它不能解决问题,但是谢谢你帮助我理解这一点more@15wshepth不管你的鞋盒有多大,你只能放这么多的猫。你唯一的选择是得到一个更大的盒子,或使用更少的猫。没有什么神奇的关键词能改变这个事实。您的选择是:您是否希望在发生悲惨的猫溢时立即出错?或者你想在猫跳出来策划报复你的时候继续往盒子里添猫吗?@maccettura我承认我的类比有一些缺陷。这不适用于System.OverflowException HResult=0x80131516 Message=算术运算导致了溢出。@15wshepth它完全按照预期工作。它将抛出一个异常,而不仅仅是溢出整数。这就是为什么要对其进行检查,以确保您不会执行会溢出总数的操作。它不会悄悄地溢出整数,而是抛出一个异常,以便您可以处理它。不过,您可能想找到一种新的方法来实现这一点。您无法更改32位整数的拟合度,这只是数学…哦,对了,对不起,我没有安静地理解你的回答是什么意思谢谢你的澄清:D。它没有安静地回答问题,因为它不能解决问题,但是谢谢你帮助我理解这一点more@15wshepth不管你的鞋盒有多大,你只能放这么多的猫。你唯一的选择是得到一个更大的盒子,或使用更少的猫。没有什么神奇的关键词能改变这个事实。您的选择是:您是否希望在发生悲惨的猫溢时立即出错?或者你想在猫跳出来策划报复你的时候继续往盒子里添猫吗?@maccettura我承认我的类比有一些缺陷。请使用建议的结构别名。即longplz使用建议的结构别名。即长