Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Multiplying int with long result c#

Wonder why. C# .Net 3.5

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

Where does this minus from?

like image 388
Дмитрий Смирнов Avatar asked Jan 26 '15 17:01

Дмитрий Смирнов


1 Answers

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.)

like image 119
Jon Skeet Avatar answered Oct 03 '22 06:10

Jon Skeet