C语言定义并使用字段 C语言使用位操作显示二进制 C语言位字段和按位运算 C语言定义并使用字段 /* fields.c -- define and use fields */ #include <stdio.h> #include <stdbool.h> //C99, defines bool, true, false /* line styles */ #define SOLID 0 #define DOTTED 1 #define DASHED 2 /* primary colors */ #define BLUE 4 #define GREEN 2 #define RED 1 /* mixed colors */ #define BLACK 0 #define YELLOW (RED | GREEN) #define MAGENTA (RED | BLUE) #define CYAN (GREEN | BLUE) #define WHITE (RED | GREEN | BLUE) const char * colors[8] = {"black", "red", "green", "yellow", "blue", "magenta", "cyan", "white"}; struct box_props { bool opaque : 1; // or unsigned int (pre C99) unsigned int fill_color : 3; unsigned int : 4; bool show_border : 1; // or unsigned int (pre C99) unsigned int border_color : 3; unsigned int border_style : 2; unsigned int : 2; }; void show_settings(const struct box_props * pb); int main(void) { /* create and initialize box_props structure */ struct box_props box = {true, YELLOW , true, GREEN, DASHED}; printf("Original box settings:\n"); show_settings(&box); box.opaque = false; box.fill_color = WHITE; box.border_color = MAGENTA; box.border_style = SOLID; printf("\nModified box settings:\n"); show_settings(&box); return 0; } void show_settings(const struct box_props * pb) { printf("Box is %s.\n", pb->opaque == true ? "opaque": "transparent"); printf("The fill color is %s.\n", colors[pb->fill_color]); printf("Border %s.\n", pb->show_border == true ? "shown" : "not shown"); printf("The border color is %s.\n", colors[pb->border_color]); printf ("The border style is "); switch(pb->border_style) { case SOLID : printf("solid.\n"); break; case DOTTED : printf("dotted.\n"); break; case DASHED : printf("dashed.\n"); break; default : printf("unknown type.\n"); } } C语言使用位操作显示二进制 C语言位字段和按位运算