struct按位分配内存

1.计算机里面所有数据是按照补码表示的,就是说比如16位的-1,计算机里面用补码表示成11111111,11111111
   (补码的计算是:正数不变,是多少就保存实际的值;负数的话,先变成正数,然后所有位取反(反码),最后加1的补码.如-1:(-)00000000,00000001 -> 00000000,00000001->11111111,11111110(反码) ->11111111,11111111(补码).
2.计算机里面保存的值都是补码,取出来的时候,根据数据类型做不同的分析。比如,下面的程序,unsigned a:3,和int a:3是不一样的,内存里面值是:111的话,前者读出来认为是7,后者读出来就认为是-1.

#include
#include
#include
#include
#include
#include
#if 1
typedef struct node
{
    unsigned a:3;
    signed b:3;
    int c:3;
}Node;
#else
typedef struct node
{
    int a:3;
    int b:3;
    int c:3;
}Node;
#endif
int main()
{
    int a = -1;
    Node x;
    printf("sizeof(unsigned) == %d/n",sizeof(unsigned));
    printf("sizeof(signed) == %d/n",sizeof(signed));
    printf("sizeof(Node) == %d/n",sizeof(Node));
    memset(&x,0,sizeof(Node));
    a=x.a=-1;
    a=x.b=-1;
    a=x.c=-1;
}

你可能感兴趣的:(C/C++,struct,c)