Дми*_*нов 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)
这减去了哪里?
这减去了哪里?
从整数溢出.请注意,您的代码相当于:
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
.)