enum 枚举名 { 枚举值表 }; |
enum weekday { sun,mou,tue,wed,thu,fri,sat }; |
enum weekday { ...... }; enum weekday a,b,c;或者为: enum weekday { ...... }a,b,c;或者为: enum { ...... }a,b,c; |
main(){ enum weekday { sun,mon,tue,wed,thu,fri,sat } a,b,c; a=sun; b=mon; c=tue; printf("%d,%d,%d",a,b,c); } |
main(){ enum body { a,b,c,d } month[31],j; int i; j=a; for(i=1;i〈=30;i++){ month[i]=j; j++; if (j〉d) j=a; } for(i=1;i〈=30;i++){ switch(month[i]) { case a:printf(" %2d %c ",i,'a'); break; case b:printf(" %2d %c ",i,'b'); break; case c:printf(" %2d %c ",i,'c'); break; case d:printf(" %2d %c ",i,'d'); break; default:break; } } printf(" "); } |
main(){ int a=9,b=5,c; c=a&b; printf("a=%d b=%d c=%d ",a,b,c); } |
00001001|00000101 00001101 (十进制为13)可见9|5=13 main(){ int a=9,b=5,c; c=a|b; printf("a=%d b=%d c=%d ",a,b,c); } |
00001001^00000101 00001100 (十进制为12) main(){ int a=9; a=a^15; printf("a=%d ",a); } |
main(){ unsigned a,b; printf("input a number: "); scanf("%d",&a); b=a〉〉5; b=b&15; printf("a=%d b=%d ",a,b); } |
main(){ char a='a',b='b'; int p,c,d; p=a; p=(p〈〈8)|b; d=p&0xff; c=(p&0xff00)〉〉8; printf("a=%d b=%d c=%d d=%d ",a,b,c,d); } |
位域
有些信息在存储时,并不需要占用一个完整的字节, 而只需占几个或一个二进制位。例如在存放一个开关量时,只有0和1 两种状态, 用一位二进位即可。为了节省存储空间,并使处理简便,C语言又提供了一种数据结构,称为“位域”或“位段”。所谓“位域”是把一个字节中的二进位划分为几个不同的区域, 并说明每个区域的位数。每个域有一个域名,允许在程序中按域名进行操作。 这样就可以把几个不同的对象用一个字节的二进制位域来表示。一、位域的定义和位域变量的说明位域定义与结构定义相仿,其形式为:
struct 位域结构名
{ 位域列表 };
其中位域列表的形式为: 类型说明符 位域名:位域长度
例如:
struct bs { int a:8; int b:2; int c:6; }; |
struct bs { int a:8; int b:2; int c:6; }data; |
struct bs { unsigned a:4 unsigned :0 /*空域*/ unsigned b:4 /*从下一单元开始存放*/ unsigned c:4 } |
struct k { int a:1 int :2 /*该2位不能使用*/ int b:3 int c:2 }; |
main(){ struct bs { unsigned a:1; unsigned b:3; unsigned c:4; } bit,*pbit; bit.a=1; bit.b=7; bit.c=15; printf("%d,%d,%d ",bit.a,bit.b,bit.c); pbit=&bit; pbit-〉a=0; pbit-〉b&=3; pbit-〉c|=1; printf("%d,%d,%d ",pbit-〉a,pbit-〉b,pbit-〉c); } |
typedef char NAME[20]; 表示NAME是字符数组类型,数组长度为20。 |
typedef struct stu{ char name[20]; int age; char sex; } STU; |
……