X86架构下基本类型的内存存储,字节序

此随笔测试x86下如何存储int型数据:高地址位存储int的高位,低地址位存储int的低位。这种存储方式叫做小端格式

另外还有“大端格式”。

 

看一个程序:

代码
#include "stdio.h"
void main()
{
    int ival = 65536;
    
char *= &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 *= (int *)&(u.a[1]);            //注意是a[1],不是a[0]
 9     *= 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

posted on 2010-01-17 16:30  ︶ㄣ第二名  阅读(1571)  评论(3编辑  收藏  举报