[Author Prev][Author Next][Thread Prev][Thread Next][Author Index][Thread Index]

Re: gEDA-user: pcb crooked traces



Peter Clifton:
> On Wed, 2010-10-13 at 00:05 +0200, Karl Hammar wrote:
> >  Why does
> > 
> > #include <stdio.h>
> > int main(void) {
> >  char cc = 0xc4 // 'ä' in latin1
> >  short str = cc;
> >  printf("0x%04hx\n", str);
> > }
> > 
> >  print 0xffc4 instead of 0x00c4 ?
> 
> It is because 0xc4 is inserted into a "char", not an "unsigned char",
> and is in binary:
> 
> 1100 0100
> 
> Which is a _negative_ number. (-60 in decimal)
> 
> The compiler will (correctly) sign-extend the assigned value in str when
> performing the type conversion.

Close, but you missed to point out that a char is signed on my box.
It could as well be unsigned, but then the problem would not show up.

> I wasn't sure this was a question you already knew the answer two or
> not.. but it is certainly a nice example of why you have to be careful
> mixing different types, and signed-ness in general.

Yes, and there are portability issues also.

Regards,
/Karl Hammar

---------
Aspö Data
Lilla Aspö 148
S-742 94 Östhammar
Sweden
+46 173 140 57




_______________________________________________
geda-user mailing list
geda-user@xxxxxxxxxxxxxx
http://www.seul.org/cgi-bin/mailman/listinfo/geda-user