Linux C语言 29-位域

Linux C语言 29-位域

本节关键字:C语言 位域 位运算
相关C库函数:

什么是位域?

C 语言的位域(bit-field)是一种特殊的结构体成员,允许我们按位对成员进行定义,指定其占用的位数。

位域的作用

在实际项目中,使用位域最大的优点就是节约内存空间。其次,使用位域后可以减少位运算(位移、与、或)。

位域的使用

#include <stdio.h>

// 假如我们定义了一个开关集合,每个开关只能出现0和1两个值
typedef struct 
{
    char s_0;
    char s_1;
    char s_2;
    char s_3;
    char s_4;
    char s_5;
    char s_6;
    char s_7;
} byte1_t;

typedef struct
{
    char s_0:1;
    char s_1:1;
    char s_2:1;
    char s_3:1;
    char s_4:1;
    char s_5:1;
    char s_6:1;
    char s_7:1;
} byte2_t;

int main(void)
{
    char value = 1;
    byte1_t b1;
    byte2_t b2;
    char *p = NULL;
    int i;
    
    printf("========= byte1_t: \n");
    p = (char*)&b1;
    for (i=0; i<8; i++)
    {
        if (i % 2 == 0)
            *(p+i) = 1;
        else
            *(p+i) = 0;
    }
    for (i=0; i<8; i++)
        printf("s_%d=%d\n", i+1, *(p+i));
    
    printf("\n\n\n========= byte2_t: \n");
    p = (char*)&b2;
    for (i=0; i<8; i++)
    {
        if (i % 2 == 0)
            *p |= (1<<i);
        else
            *p &=~ (1<<i);
    }
    for (i=0; i<8; i++)
        printf("s_%d=%d\n", i, *p>>i & 1);
    
    printf("\n\n");
    printf("=========byte1_t size: %d\n", sizeof(byte1_t));
    printf("=========byte2_t size: %d\n", sizeof(byte2_t));
    
    return 0;
}

/** 运行结果:
========= byte1_t:
s_1=1
s_2=0
s_3=1
s_4=0
s_5=1
s_6=0
s_7=1
s_8=0
========= byte2_t:
s_0=1
s_1=0
s_2=1
s_3=0
s_4=1
s_5=0
s_6=1
s_7=0
=========byte1_t size: 8
=========byte2_t size: 1
*/
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值