C++ 位域之我见

 今天之前没有接触过位域这个概念,这个概念也很少有书提及。

深入研究之后终于明白了。。。

先以下面的例子进行剖析:



我的理解是 位域是为了节省更多的空间。

但是过多的节省空间,缺并未做存储界限检查,可能会导致 存储数据丢失的现象。


首先我们来分析为什么是16。


这是大家都知道的位的概念

8bit(位)=1Byte(字节)
1024Byte(字节)=1KB
1024KB=1MB
1024MB=1GB
1024GB=1TB


在32位系统中,sizeof(int)是4字节

一个int就是32位。


测试:

一个结构体中 char a :1 ~ char a : 8

sizeof(t)结果都于1

如果char a : 9;

ERROR:位域类型对位数太小


第二次我测试的是int。

结果是 int a : 1 ~ int a : 32

sizeof(t)结果等于4

如果int a :33

ERROR:位域类型对位数太小

 

这样一测试就很明白了。

char 最大8位,int最大32位

因此位域限额也为最大值

 

在测试:

我加了一位进结构体 根据内存对其原则 结果为8 即64位

 

因此 下面例子不难解释:

这个例子先一直不懂 现在明白了。

重c~d的内存中间空余了 32-4-4-3 = 21位。

 

为了成立上面的说法,再测:

这里又有不懂得地方了,先睡觉,明天在说

 

2009年5月16日

继续写。

上面32位是4 但是double是8字节对齐 所以 在double前有64位可以利用。

就是这么简单,我自己想复杂了。

 

还有一点说明的是,double是会干扰你的位域的。


结果24,很显然 这样double干扰了位域的存放。

 

好了,存放原理基本明白了。

下面研究一下数据是如何保存的。

32位机器上,int是32位 就是FF FF FF FF。

那么一个F 就是8位

一个char 也是8位 就是一个F。

 

下面是一个例子,看懂了什么都明白了:

 

看完还不懂就仔细读读我转的下个文章。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值