MST

星途 面试题库

面试题:C语言结构体中位域的基础应用

定义一个结构体,包含两个位域成员,一个表示颜色(用3位表示,可表示8种颜色),另一个表示是否可见(1位)。编写代码初始化该结构体,并输出这两个位域的值。
42.9万 热度难度
编程语言C

知识考点

AI 面试

面试题答案

一键面试
#include <stdio.h>

// 定义结构体
struct ColorVisibility {
    unsigned int color : 3; // 3位表示颜色,可表示8种颜色
    unsigned int visible : 1; // 1位表示是否可见
};

int main() {
    struct ColorVisibility cv;

    // 初始化结构体
    cv.color = 5; // 例如设置颜色为5
    cv.visible = 1; // 设置为可见

    // 输出位域的值
    printf("Color value: %u\n", cv.color);
    printf("Visibility value: %u\n", cv.visible);

    return 0;
}

上述代码定义了一个包含两个位域成员的结构体ColorVisibility,一个用于表示颜色,另一个用于表示是否可见。然后在main函数中对结构体进行初始化,并输出这两个位域的值。

注意:不同编译器对于位域的存储和访问可能存在细微差异,但基本原理相同。

  1. 结构体定义
    • unsigned int color : 3;定义了一个名为color的无符号整型位域,占用3位,可表示0 - 7共8种颜色。
    • unsigned int visible : 1;定义了一个名为visible的无符号整型位域,占用1位,可表示0(不可见)或1(可见)。
  2. 初始化
    • cv.color = 5;设置颜色值为5。
    • cv.visible = 1;设置为可见。
  3. 输出
    • 使用printf输出两个位域的值。

如果使用C++,代码基本相同,只需要将文件后缀改为.cpp,并且可以选择使用cout来输出:

#include <iostream>

struct ColorVisibility {
    unsigned int color : 3;
    unsigned int visible : 1;
};

int main() {
    struct ColorVisibility cv;
    cv.color = 5;
    cv.visible = 1;

    std::cout << "Color value: " << cv.color << std::endl;
    std::cout << "Visibility value: " << cv.visible << std::endl;

    return 0;
}