Multiplying int with long result c#

后端 未结 6 1586
自闭症患者
自闭症患者 2020-12-18 07:29

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 do

6条回答
  •  攒了一身酷
    2020-12-18 07:44

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

提交回复
热议问题