博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

位域中比特序

Posted on 2011-08-21 21:00  ChessYoung  阅读(402)  评论(0编辑  收藏  举报
#include "stdafx.h"
#include
<iostream>
#include
<assert.h>
#include
<string>
using namespace std;

union V
{
struct X
{
unsigned
char s1:2;
unsigned
char s2:3;
unsigned
char s3:3;
} x;

unsigned
char c;
} v;


int _tmain(int argc, _TCHAR* argv[])
{
v.c
= 100;
printf(
"%d", v.x.s3);

return 0;
}

v是联合体(共用体)变量,共有两个元素x和c,都需要一个字节,它们分配于同一个地址。而x是结构体变量,共有三个元素s1、s2、s3,分别占2位、3位、3位。分配内存时低位在前,最位在后。当有v.c=100(其二进制为01100100)时,各变量的关系及内存存储情况见图所示。
其中x的成员s3为二进制的011,即十进制的3,所以输出结果为3。这是在小端模式下。

如果是大端模式呢?\(^o^)/~

union 
{
int i;
char x[2];
}a;

int _tmain(int argc, _TCHAR* argv[])
{
a.x[
0] = 10;
a.x[
1] = 1;
printf(
"%d", a.i);

return 0;
}

输出为266,低位地地址,高位高地址,内存占用情况是0x010A