1.1 位域 位段


位域|位段是什么

位域(Bit Field)和位段(Bit Segment)这两个术语在计算机科学和编程中通常指的是相同的概念。位域是一种数据结构,它允许程序员在一个整数类型的数据结构中定义多个固定长度的位组(bit groups),这些位组可以分别表示不同的字段或变量。

位域是指信息在存储时,并不需要一个完整的字节,而只需占一个或几个二进制位。


示例代码

以下是一个正确的位域定义示例

#include <stdio.h>

struct BitField {
    unsigned int a : 3; // 占用 3 位
    unsigned int b : 5; // 占用 5 位
   	char c : 1; // 占用 1 位
} bitfield;

int main() {
    bitfield.a = 5;
    bitfield.b = 21;
    bitfield.c = 0;
    
    printf("a: %d, b: %d, c: %d\n", bitfield.a, bitfield.b, bitfield.c);
    
    return 0;
}

要点:

可以把位域想像成一个盒子,在盒子中再细分空间(bit)放东西。

在这里插入图片描述

  1. 位域必须在结构体或联合体中定义。
  2. 位域在结构体中允许不同的字段共享相同的存储空间,以节省内存空间。
  3. 位域在联合体中则与其他成员共享同一块内存区域,适用于需要直接访问硬件寄存器等场合。
  4. 位域不能跨字节存储,超过之后要占用下一个盒子(要多开辟一块对应类型的空间)。|解释|
  5. 位域不能跨类型存储.(因为一个类型对应一个盒子,只能在对应类型下开辟空间)

位段详解

内存分配问题

CSDN有位博主解释的非常详细:

位段的内存分配

可能会问:不是还有bool类型吗?

答:C 语言标准本身并不直接支持布尔类型的变量,直到 C99 标准才引入了 _Bool 类型作为布尔类型的表示。在 C99 之后的版本中,你可以使用 _Bool 类型来声明布尔变量。然而,为了更方便地使用布尔类型,通常会推荐使用 <stdbool.h> 头文件,该头文件定义了 bool 类型和相关的宏。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值