- #include<stdio.h>
- #include<windows.h>
- #include<string.h>
- #define SOLID 0
- #define DOTTED 1
- #define DASHED 2
- #define BLUE 4
- #define GREEN 2
- #define RED 1
- #define BLACK 0
- #define YELLOW (RED | GREEN)
- #define MAGENTA (RED | BLUE)
- #define CYAN (GREEN | BLUE)
- #define WHITE (RED | GREEN | BLUE)
- #define OPAQUE 0x1
- #define FILL_BLUE 0x8
- #define FILL_GREEN 0x4
- #define FILL_RED 0x2
- #define FILL_MASK 0xe
- #define BORDER 0x100
- #define BODRE_BLUE 0x800
- #define BODER_GREEN 0x400
- #define BODER_RED 0x200
- #define BODER_MASK 0xe00
- #define B_SOLID 0
- #define B_DOTTED 0x1000
- #define B_DASHED 0x2000
- #define STYLE_MASK 0x3000
- const char *colors[] =
- {"black","red","green","yellow","blue","magenta","cyan","white"};
- struct box_props
- {
- int opaque :1;
- unsigned int fill_color :3;
- unsigned int :4;
- int show_border :1;
- unsigned int border_color :3;
- unsigned int border_style :2;
- unsigned int :2;
- };
- union views
- {
- struct box_props st_view;
- unsigned short us_view;
- };
- void show_settings(unsigned short);
- int main(void)
- {
- union views box = {{1,YELLOW,1,GREEN,DASHED}};
- char bin_str[8 * sizeof(unsigned int) + 1];
- printf("\nbox settints using unsigned int view:\n");
- show_settings(box.us_view);
- system("pause");
- return 0;
- }
- void show_settings(unsigned short us)
- {
- printf("box is %s.\n",(us & OPAQUE) == OPAQUE ? "opaque" : "transparent");
- printf("the fill color is %s.\n",colors[(us >> 1) & 07]);
- printf("border %s.\n",(us & BORDER) == BORDER ? "shown" : "not shown");
- printf("the border style is");
- switch (us & STYLE_MASK)
- {
- case B_SOLID :printf("solid.\n");
- break;
- case B_DOTTED :printf("dotted.\n");
- break;
- case B_DASHED :printf("dashed.\n");
- break;
- default :printf("unknown type.\n");
- }
- printf("the border color is %s.\n",colors[(us >> 9) & 07]);
- }
复制代码
|
编译软件:VS2010
电脑系统:win10家庭版
问题:
此代码是C Primer Plus书中第15章的(程序清单15.4 dualview.c)
请各位帮忙看看这个us_view = 9479是怎么求到的??
本人C基础还比较差,谢谢各位啦!