c语言位域操作与大小端那些事

一、写在前面

在c语言的结构体成员类型中,有一种位域,可以使我们定义制定二进制长度的参数,往往这样可以帮我们节省内存。在正常采用常规的结构体成员读写时,不会出现什么问题。但是,在使用指针方式批量访问时,往往需要考虑内存的存储模式即,大小端模式。下面以实例方式,给出大小端对结构体位域操作的一些影响点。

二、结构体位域操作与大小端那些事

1、不考虑位域对齐情况下的存储结构

某几个数据位的和小于其数据类型时,即依照下面结构体(b1+b2+b3+b4+b5<sizeof(int))

定义结构体如下:

struct BitOperationType{
    int b1:1;
    int b2:2;
    int b3:3;
    int b4:4;
    int b5:5;
};

存储结构如下。(注,对于大端的存储方式,仅仅参考博客上一些知识点,理论推导,大端模式的图仅仅作为一个指导,在实际使用时,需要结合具体的硬件平台;小端模式是在电脑平台上进行测试的。)

2、考虑字节对齐情况下的位域参数

定义如下结构体

struct BitOperationType{
    unsigned char b1:2;
    unsigned char b2:3;
    unsigned char b3:5;
    unsigned char b4;
    unsigned char b5:3;
};

其存储结构如下注(对于大端的存储方式,仅仅参考博客上一些知识点,理论推导,大端模式的图仅仅作为一个指导,在实际使用时,需要结合具体的硬件平台;小端模式是在电脑平台上进行测试的。)

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值