Re: moused(8): char signed-ness problem with gcc 3.1
Bill Fenner <[email protected]>
| Newsgroups | gmane.os.freebsd.devel.audit |
|---|---|
| Message-ID | <[email protected]> |
>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-audit" in the body of the message