面试题答案
一键面试#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
函数中对结构体进行初始化,并输出这两个位域的值。
注意:不同编译器对于位域的存储和访问可能存在细微差异,但基本原理相同。
- 结构体定义:
unsigned int color : 3;
定义了一个名为color
的无符号整型位域,占用3位,可表示0 - 7共8种颜色。unsigned int visible : 1;
定义了一个名为visible
的无符号整型位域,占用1位,可表示0(不可见)或1(可见)。
- 初始化:
cv.color = 5;
设置颜色值为5。cv.visible = 1;
设置为可见。
- 输出:
- 使用
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;
}