此随笔测试x86下如何存储int型数据:高地址位存储int的高位,低地址位存储int的低位。这种存储方式叫做小端格式。
另外还有“大端格式”。
看一个程序:
代码
#include "stdio.h"
void main()
{
int ival = 65536;
char *p = &ival;
printf("*p: %d\n", *p);
printf("*p+1: %d\n", *(p+1));
printf("*p+2: %d\n", *(p+2));
printf("*p+3: %d\n", *(p+3));
printf("*p+4: %d\n", *(p+4));
//打印指针地址
printf("p: %p\n", p);
printf("p+1: %p\n", p+1);
printf("p+2: %p\n", p+2);
printf("p+3: %p\n", p+3);
printf("p+4: %p\n", p+4);
}
void main()
{
int ival = 65536;
char *p = &ival;
printf("*p: %d\n", *p);
printf("*p+1: %d\n", *(p+1));
printf("*p+2: %d\n", *(p+2));
printf("*p+3: %d\n", *(p+3));
printf("*p+4: %d\n", *(p+4));
//打印指针地址
printf("p: %p\n", p);
printf("p+1: %p\n", p+1);
printf("p+2: %p\n", p+2);
printf("p+3: %p\n", p+3);
printf("p+4: %p\n", p+4);
}
输出结果:
*p: 0
*p+1: 0
*p+2: 1
*p+3: 0
*p+4: -52
p: 0012FF70
p+1: 0012FF71
p+2: 0012FF72
p+3: 0012FF73
p+4: 0012FF74
看一个练习题:
练习
1 #include "stdio.h"
2 void main()
3 {
4 union { char a[10];
5 int i;
6 } u;
7
8 int *p = (int *)&(u.a[1]); //注意是a[1],不是a[0]
9 *p = 65536;
10 printf("u.i = %d\n", u.i);
11 printf("u.a[0] = %d\n", u.a[0]);
12 printf("u.a[1] = %d\n", u.a[1]);
13 printf("u.a[2] = %d\n", u.a[2]);
14 printf("u.a[3] = %d\n", u.a[3]);
15 printf("u.a[4] = %d\n", u.a[4]);
16 }
2 void main()
3 {
4 union { char a[10];
5 int i;
6 } u;
7
8 int *p = (int *)&(u.a[1]); //注意是a[1],不是a[0]
9 *p = 65536;
10 printf("u.i = %d\n", u.i);
11 printf("u.a[0] = %d\n", u.a[0]);
12 printf("u.a[1] = %d\n", u.a[1]);
13 printf("u.a[2] = %d\n", u.a[2]);
14 printf("u.a[3] = %d\n", u.a[3]);
15 printf("u.a[4] = %d\n", u.a[4]);
16 }
输出结果:
u.i = 16777420
u.a[0] = -52
u.a[1] = 0
u.a[2] = 0
u.a[3] = 1
u.a[4] = 0
关于字节序的参考:http://hi.baidu.com/santy/blog/item/0cb6024fd0634730aec3ab09.html