MST

星途 面试题库

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

定义一个C语言结构体,包含几个不同长度的位域,分别表示颜色的红、绿、蓝分量(每个分量用不同的位宽表示),并编写一个函数,将给定的RGB值存入该结构体,然后编写另一个函数从结构体中取出RGB值。
50.4万 热度难度
编程语言C

知识考点

AI 面试

面试题答案

一键面试
#include <stdio.h>

// 定义结构体
typedef struct {
    unsigned int red   : 8;  // 8位表示红色分量
    unsigned int green : 10; // 10位表示绿色分量
    unsigned int blue  : 6;  // 6位表示蓝色分量
} RGBStruct;

// 将RGB值存入结构体的函数
void setRGB(RGBStruct *rgb, unsigned int r, unsigned int g, unsigned int b) {
    rgb->red = r & 0xff;
    rgb->green = g & 0x3ff;
    rgb->blue = b & 0x3f;
}

// 从结构体中取出RGB值的函数
void getRGB(const RGBStruct *rgb, unsigned int *r, unsigned int *g, unsigned int *b) {
    *r = rgb->red;
    *g = rgb->green;
    *b = rgb->blue;
}

int main() {
    RGBStruct myRGB;
    unsigned int r, g, b;

    setRGB(&myRGB, 100, 200, 50);
    getRGB(&myRGB, &r, &g, &b);

    printf("Red: %u, Green: %u, Blue: %u\n", r, g, b);

    return 0;
}
  1. 结构体定义:使用typedef定义了一个名为RGBStruct的结构体,其中red用8位表示,green用10位表示,blue用6位表示。
  2. setRGB函数:该函数接受一个RGBStruct指针以及红、绿、蓝三个分量值,将这些值存入结构体相应的位域中,并且通过按位与操作确保值不会超出位域的范围。
  3. getRGB函数:该函数接受一个const RGBStruct指针以及三个用于存储红、绿、蓝分量值的指针,从结构体中取出相应的值并存储到对应的指针指向的变量中。
  4. main函数:测试了上述两个函数,设置RGB值并取出打印。