为什么左移位运算符为硬编码值和大整数打印不同的结果

问题描述 投票:0回答:1

当使用左移和大整数时,我得到不同的结果,当我使用硬编码时,为什么这样,它如何克服?

    BigInteger num = 1779033703;
    BigInteger result = num << 30;
    Console.WriteLine(result);
    Console.WriteLine(1779033703 << 30);

结果

1910222893216694272

-1073741824

c# bitwise-operators
1个回答
2
投票

因为1779033703 << 30在常规int(一个32位有符号整数)上,你正在击中溢出,因此它再次从int.MinValue开始。 BigInteger可以处理更大的值,因此不受溢出的影响。

尝试使用long(64位有符号整数),你会看到你获得与BigInteger相同的结果。

© www.soinside.com 2019 - 2024. All rights reserved.