打印
[51单片机]

KEIL 位变量 结构体所占用字节数 不对 百思不得其解

[复制链接]
2469|5
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
nyf1972|  楼主 | 2015-5-21 00:58 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 nyf1972 于 2015-5-21 01:00 编辑

struct StuctByte
{
unsigned B0 :1;
unsigned B1 :1;
unsigned B2 :1;
unsigned B3 :1;
unsigned B4 :1;
unsigned B5 :1;
unsigned B6 :1;
unsigned B7 :1;
};
struct StuctByte StuctByte_DO;
uchar i;
i=sizeof(StuctByte_DO);
--------------------
运行结果i=2;
  
谁能给解释一下???

KEIL uv4 编译  

如何能让sizeof(StuctByte_DO)=1???

相关帖子

沙发
ayb_ice| | 2015-5-21 06:53 | 只看该作者
unsigned char xx:1;就可以了

使用特权

评论回复
板凳
airwill| | 2015-5-21 07:04 | 只看该作者
有可能的编译器的强制规定, 没有试过. 这样的问题基本只能它说什么,就是什么了.

使用特权

评论回复
地板
diweo| | 2015-5-21 08:19 | 只看该作者
本帖最后由 diweo 于 2015-5-21 08:22 编辑

呵呵,我试了一下,居然i=4。。。
不过,可以把它放到union里面,强制它大小是1字节。或者就用2楼的方法
union{
        unsigned char Byte;
        struct
        {
        unsigned B0 :1;
        unsigned B1 :1;
        unsigned B2 :1;
        unsigned B3 :1;
        unsigned B4 :1;
        unsigned B5 :1;
        unsigned B6 :1;
        unsigned B7 :1;
        }Bits;
}u1;

使用特权

评论回复
5
ayb_ice| | 2015-5-21 09:14 | 只看该作者
diweo 发表于 2015-5-21 08:19
呵呵,我试了一下,居然i=4。。。
不过,可以把它放到union里面,强制它大小是1字节。或者就用2楼的方法
un ...

你这这是在32位机上的结果
unsigned B0 :1;这个等于unsigned int B0 :1;结果当然等于4了

使用特权

评论回复
6
nyf1972|  楼主 | 2015-5-21 09:44 | 只看该作者
struct StuctByte
{
unsigned char B0 :1;
unsigned char B1 :1;
unsigned char B2 :1;
unsigned char B3 :1;
unsigned char B4 :1;
unsigned char B5 :1;
unsigned char B6 :1;
unsigned char B7 :1;
};
struct StuctByte StuctByte_DO;
uchar i;
i=sizeof(StuctByte_DO);

i=1
  2楼正 解决  ,

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

个人签名:重庆合普仪器仪表有限公司

11

主题

107

帖子

1

粉丝