将int乘以长结果c#

Дми*_*нов 4 c# int multiplying .net-3.5 long-integer

想知道为什么.C#.Net 3.5

int a = 256 * 1024 * 1024;
int b = 8;
long c = b * a;
Console.WriteLine(c);//<-- result is -2147483648 
Run Code Online (Sandbox Code Playgroud)

这减去了哪里?

Jon*_*eet 6

这减去了哪里?

从整数溢出.请注意,您的代码相当于:

int a = 256 * 1024 * 1024;
int b = 8;
int tmp = b * a;
long c = tmp;
Console.WriteLine(c);
Run Code Online (Sandbox Code Playgroud)

我已经将赋值的乘法与long变量分开,以强调它们实际上是单独的运算 - 乘法是使用Int32算术执行的,因为两个操作数都是Int32- 结果分配给Int64后来的事实是无关紧要的.

如果要在64位运算中执行乘法运算,则应将其中一个操作数转换为long(即Int64):

int a = 256 * 1024 * 1024;
int b = 8;
long c = b * (long) a;
Console.WriteLine(c); // 2147483648
Run Code Online (Sandbox Code Playgroud)

(你投射到哪个操作数并不重要long- 另一个操作数将被隐式转换为long.)