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
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.