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

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

另外还有“大端格式”。

 

看一个程序:

ExpandedBlockStart.gif 代码
#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

看一个练习题:

ExpandedBlockStart.gif 练习
 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

转载于:https://www.cnblogs.com/younes/archive/2010/01/17/1650032.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值