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

一、写在前面

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

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

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

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

定义结构体如下:

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

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

c语言位域操作与大小端那些事_第1张图片

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

定义如下结构体

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

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

c语言位域操作与大小端那些事_第2张图片

你可能感兴趣的:(c语言日常随笔)