关于内存对齐

来源:互联网 发布:压力容器类别划分软件 编辑:程序博客网 时间:2024/06/06 19:16

1、struct s1

{

int i:8;

int j:4;

int a:3;

double b;

}

sizeof(s1)=16

2、

#include<iostream>

#include<string.h>

#include<stdio.h>

#include<stdlib.h>

#include<memory.h>

typedef struct AA

{

int b1:5;

int b2:2;

}AA;

void main()

{

AA aa;

char cc[100];

strcpy(cc,"0123456789abcdefghijklmnopqrstuvwxyz");

memcpy(&aa,cc,sizeof(AA));

cout<<aa.b1<<endl;

cout<<aa.b2<<endl;

}

 

 

首先sizeof(AA)的大小为4,b1和b2分别占5bit和2bit。经过strcpy和memcpt后,aa的4个字节所存放的值是:

0,1,2,3的ASCII码,即00110000,00110001,00110010,00110011

所以,最后一步:显示的是这4个字节的前5位,和之后的2为:分别是10000,和01

因为int有正负之分,故答案是-16和1