Where does this minus from?
From the integer overflow. Note that your code is equivalent to:
int a = 256 * 1024 * 1024;
int b = 8;
int tmp = b * a;
long c = tmp;
Console.WriteLine(c);
I've separated out the multiplication from the assignment to the long
variable to emphasize that they really are separate operations - the multiplication is performed using Int32
arithmetic, because both operands are Int32
- the fact that the result is assigned to an Int64
afterwards is irrelevant.
If you want to perform the multiplication in 64-bit arithmetic, you should cast one of the operands to long
(i.e. Int64
):
int a = 256 * 1024 * 1024;
int b = 8;
long c = b * (long) a;
Console.WriteLine(c); // 2147483648
(It doesn't matter which operand you cast to long
- the other one will be implicitly converted to long
anyway.)
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…