gpt4 book ai didi

c# - 非常大的长型数字变成负数

转载 作者:太空宇宙 更新时间:2023-11-03 19:50:00 24 4
gpt4 key购买 nike

目前,我的 C# 代码有点问题。我有一组代码应该将“x^y^z...”形式的字符串转换为数字,因此我设置了一个如下所示的方法。

public long valueOfPower()
{
long[] number = Array.ConvertAll(this.power.Split('^'), long.Parse);
if(number.Length == 1)
{
return number[0];
}
long result = number[0];
long power = number[number.Length-1];
for (long i = number.Length-1; i > 1; i-- )
{
power = (long)Math.Pow((int)number[(int)i-1], (int)power);
}
result= (long)Math.Pow((int)result,(int)power);
return result;
}

我遇到的问题是,当输入类似 2^2^2^2^2 的内容时,我得到一个非常大的负数。我不确定我的代码是否有问题,或者因为 2^2^2^2^2 对于长对象来说太大了,但我不明白发生了什么。

所以,问题是,当“this.power”为 2^2^2^2^2 时,为什么我的代码返回一个大的负数,但输入较小的正常数字(如 2^2^2^2 )?(对随机转换感到抱歉,这是我尝试不同数字类型的结果。)

最佳答案

发生的事情是溢出。每种数据类型都存储为一定数量的位。因为位数是有限的,所以任何数据类型可以存储的最大数量都是有限的。因为最高有效位通常代表数字的符号,所以当超过数据类型的最大值时,该位翻转,计算机现在将其解释为负数。

如果您的数学会溢出,您可以使用 checked 关键字来抛出异常。更多信息请点击此处:https://msdn.microsoft.com/en-us/library/74b4xzyw.aspx

另一种可能的解决方案是使用 BigInteger。更多信息在这里:https://msdn.microsoft.com/en-us/library/system.numerics.biginteger.aspx

有关 C# 中数据类型的最大值,请参见:http://timtrott.co.uk/data-types-ranges/

有关溢出的更多信息,请参阅:https://en.wikipedia.org/wiki/Integer_overflow

关于c# - 非常大的长型数字变成负数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40601518/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com