手记

【备战春招】第5天 嵌入式工程师学习笔记

【备战春招】第5天 嵌入式工程师学习笔记

课程信息

课程内容概述

1. 简介

本节介绍了位域:有些信息在存储时,并不需要占用一个完整的字节,而只需占几个或一个二进制位。例如在存放一个开关量时,只有 0 和 1 两种状态,用 1 位二进位即可。为了节省存储空间,并使处理简便,C 语言又提供了一种数据结构,称为"位域"或"位段"。

2. 空域

2.1 说明

一个位域存储在同一个字节中,如一个字节所剩空间不够存放另一位域时,则会从下一单元起存放该位域。也可以有意使某位域从下一单元开始。

2.2 使用方法

struct info
{
    unsigned char a:4;
    unsigned char :4;    /* 空域 */
    unsigned char b:4;    /* 从下一单元开始存放 */
    unsigned char c:4
};

3. 无名位域

3.1 说明

  • 位域的宽度不能超过它所依附的数据类型的长度,成员变量都是有类型的,这个类型限制了成员变量的最大长度,后面的数字不能超过这个长度。
  • 位域可以是无名位域,这时它只用来作填充或调整位置。无名的位域是不能使用的。

3.2 使用方法

struct info
{
    int a:1;
    int  :2;    /* 该 2 位不能使用 */
    int b:3;
    int c:2;
}st;

4. 位域大小的计算

4.1 说明

  • 如果相邻的两个位域字段的类型相同,且其位宽之和小于或等于其类型的sizeof()大小,则其后面的位域字段将紧邻前一个字段存储,直到不能容纳为止;

    例如:一个位域变量有三个位域字段a、b、c,且类型完全相同,位域字段a和b的位宽之和小于或等于其类型的sizeof()大小,那么位域字段c紧接着位域字段b后面存储;

4.2 使用方法

#include <stdio.h>


struct bit
{
    unsigned int a: 6;
    unsigned int b: 12;
    unsigned int c: 4;
}bt;


int main( )
{
    // 求sizeof(bt)的大小。
    printf("sizeof(bt):%d\n", sizeof(bt));
    return 0;
}

运行结果

sizeof(bt):4

学习心得

C语言中的位域,在节省空间、使用位进行相关处理时用处很大。

课程截图

1. 代码示例

0人推荐
随时随地看视频
慕课网APP