Re: OT: Requesting C advice

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Michael Hennebry wrote:

>> printf("%d\n",-2);
>>
>> does not result in
>>
>> -2
> 
> It should.
> printf, declared or not, will look for an int and get it.
> 
> printf("%u\n", -2);
> is more interesting.

That will do exactly the same on big and little-endian machines too, if
the int size is the same.

It's only the bytewise layout in memory that is different, and if the
compiler is putting it into registers or memory in one order and reading
it back out in the same order -- for either order -- it's invisible what
the endian-ness is.  You have to violate that in some way like this too
get a problem

{
    int n1 = 1234, n2;
    unsigned char * pc = (unsigned char *)&n1;
    /* assumption about byte ordering that is wrong for big-endian */
    n2 = pc[0] | (pc[1] >> 8) | (pc[2] >> 16) | (pc[3] >> 24);
    printf("n1=0x%X, n2=0x%X\n", n1, n2);
}

-Andy


[Index of Archives]     [Current Fedora Users]     [Fedora Desktop]     [Fedora SELinux]     [Yosemite News]     [Yosemite Photos]     [KDE Users]     [Fedora Tools]     [Fedora Docs]

  Powered by Linux