int to long assignment
int, java, long-integer
Solution
The reason is that your line
long k = i*i*i*i;
can be thought of as
long k = ((i*i)*i)*i;
or...
int k1 = i*i;
int k2 = k1*i;
int k3 = k2*i;
long k = k3;
So when any of `kn` overflows, you get the error.
When you do your casts you're obviously circumventing this problem by always multiplying `long`s together.
Of course the simplest modification to your initial program is to define `i` as a `long` straight away, instead of an `int`.
long i = 1024L;
Problem
I have been trying this int and long conversion where I have tried assigning an `int` variable to a `long` variable. The code is as follows: ``` public static void main(String []args){ int i = 1024; long j = i; long k = i*i*i*i; System.out.println("j= " +j+ ", k= " +k); } ``` So, while printing `j`, it simply gave an output of `1024`. But while printing `k`, it showed an overflow (`k`=0). I sorted out this problem by using this technique, where I have explicitly casted each `i` to `long`. i.e. ``` public static void main(String []args){ int i = 1024; long j = i; long k = ((long)i)*((long)i)*((long)i)*((long)i); System.out.println("j= " +j+ ", k= " +k); } ``` Now, it showed correct values of both `j` and `k`. So, I wanted to know why is this needed to cast `int` in the second case but not in the first one. `k`, being a `long` can retain this value after this heavy assignment. But, why it is not been correctly assigned?