Дми*_*нов 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.)
| 归档时间: |
|
| 查看次数: |
4790 次 |
| 最近记录: |