[EMAIL PROTECTED] wrote:

> In a message dated 2/25/00 10:08:31 PM Eastern Standard Time,
> [EMAIL PROTECTED] writes:
>
> > So, when the compiler sees
> >      (Long) 10 * 3600
> >  it multiplies an int 10 by an int 3600, then casts the result to a
> >  long. Unfortunately, the 10 * 3600 = 36000, which is too large for an
> >  int. The result is a (silent) math overflow. All you're doing is
> >  casting the wrong value to a long!
> >
> >  If you want to override the compiler's default interpretation of
> >  literals, you have to tell it. Append an 'L' to a literal to make the
> >  compiler interpret it as long:
> >      long result;
> >      result = 10L * 3600L;
>
> I politely disagree.
>
> (Long) 10 * 3600 will typecast 10 into a 32-bit value before doing the
> computation.  Hence the result will be the same 32-bit value that you get by
> using 10L.
>
> -Pete

And K&R disagrees with you, see page 187:

An expression preceded by the parenthesized name of a data type causes conversion of 
the value of the     expression to the named
typed.  The construction is call a cast.

If you not sure what's going on use more parentheses, ie.  ((long)10)*3600 will do 
what you want, otherwise the expression is
evaluated BEFORE the cast. Remember, the Palm is a 16-bit worl, so you have to do some 
extra typing if you want 32 bit arithmetic.

chuck




-- 
For information on using the Palm Developer Forums, or to unsubscribe, please see 
http://www.palm.com/devzone/mailinglists.html

Reply via email to