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 <stdio.h>
#include <stdlib.h>
#include <errno.h>
#include <ctype.h>
#include <string.h>
#include <memory.h>
#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;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值