#include <stdio.h> union endian { int i; char c[sizeof(int)]; }; int main(int argc, char *argv[]) { union endian e; e.i = 1; printf("%d \n",&e.i); printf("%d,%d,\n",e.c[0],&(e.c[0])); printf("%d,%d",e.c[sizeof(int)-1],&(e.c[sizeof(int)-1])); }
output:
1567599464 1,1567599464, 0,1567599467
lsb stored in lower address , msb stored in higher address. isn't supposed big endian? system config shows little endian architecture.
you system little-endian
.had been big-endian
,the following code:
printf("%d,%d,\n",e.c[0],&(e.c[0]));
will print 0
first %d
instead of 1
. in little-endian
1 stored as
00000001 00000000 00000000 00000000 ^ lsb ^lower address
but in big-endian
stored
00000000 00000000 00000000 00000001 ^lsb ^higher address
and don't use %d
print addresses of variables, use %p
.
Comments
Post a Comment