>Specifically what is the problem?  Given the program below, take the
>ISO-C spec and explain the problem.  Or even w/o the spec -- I haven't
>been reading this thread.

> > int
> > main()
> > {
> >    unsigned char i = 127;
> >    char j;
> > 
> >    printf("%d\n", ((char)(i << 1)));

This prints -2, which is correct -- (signed char)254 is -2.

> >    j = ((char)(i << 1)) / 2;
> >    printf("%d\n", j);

This prints 127, which is incorrect.  -2 / 2 is -1.

> >    j = ((char)(i << 1));
> >    printf("%d\n", j / 2);

This breaks down the previous expression into two halves, and
results in the correct answer of -1.  However, there should
be no difference between
((char)(i << 1)) / 2
and
char j = ((char)(i << 1); j / 2

  Bill

To Unsubscribe: send mail to [EMAIL PROTECTED]
with "unsubscribe freebsd-current" in the body of the message

Reply via email to