当使用左移和大整数时,我得到不同的结果,当我使用硬编码时,为什么这样,它如何克服?
BigInteger num = 1779033703;
BigInteger result = num << 30;
Console.WriteLine(result);
Console.WriteLine(1779033703 << 30);
结果
1910222893216694272
-1073741824
因为1779033703 << 30
在常规int
(一个32位有符号整数)上,你正在击中溢出,因此它再次从int.MinValue
开始。 BigInteger
可以处理更大的值,因此不受溢出的影响。
尝试使用long
(64位有符号整数),你会看到你获得与BigInteger
相同的结果。