This week's book giveaway is in the Other Languages forum.We're giving away four copies of Functional Reactive Programming and have Stephen Blackheath and Anthony Jones on-line!See this thread for details.
Win a copy of Functional Reactive Programming this week in the Other Languages forum!

Primitive Casting

Bharatesh H Kakamari
Ranch Hand
Posts: 198
Why does this not give error ?
int i = l;
long l = 10l;
int j = i << l;
Should not the RHS expression be promoted to long and throw a casting error ?
int j = l; // this throws error !

Sahir Shah
Ranch Hand
Posts: 158
???

[This message has been edited by Sahir Shah (edited December 06, 2000).]

Aru Ven
Ranch Hand
Posts: 199
Bharatesh,
in ur code u r assigning "l"(L) to int i. Make it 1 or whatever number u want & everything will be fine.

Aruna
[This message has been edited by Aru Ven (edited December 06, 2000).]

Jane Griscti
Ranch Hand
Posts: 3141
Hi Bharatesh,
Shift operators are subject to unary numeric promotion not binary; so <code>long</code> values do not force conversion of <code>int</code> values.
See JLS §5.6.1
<quote>
Each operand, separately, of a shift operator >>, >>>, or << (�15.19); therefore a long
shift distance (right operand) does not promote the value being shifted (left operand)
to long
</quote>
Hope that helps.
------------------
Jane
The cure for boredom is curiosity.
There is no cure for curiosity.
-- Dorothy Parker

Bharatesh H Kakamari
Ranch Hand
Posts: 198
What about the following :
int i = l;
long l = 10l;
double d = 10.0;
int j = i << l;
int k = i << d; // this is throwing error ?
Even in the above the last line should not throw error.

Jane Griscti
Ranch Hand
Posts: 3141
Hi Bharatesh,
Sorry for the late reply.
The line <code>int k = i << d</code> is throwing an error because 'd' is a 'double'. Shift operators don't work with floating-poing values.
Hope that helps.
------------------
Jane
The cure for boredom is curiosity.
There is no cure for curiosity.
-- Dorothy Parker