1.位段与联合(union)
#include <stdio.h>
union
{
struct
{
unsigned int x1 : 2;
unsigned int x2 : 3;
unsigned int x3 : 3;
}x;
char y;
}z;
int main()
{
z.y = 100;
printf("%d\n",z.x.x3);
return 0;
}
运行结果:
3
原因:联合的所有成员引用的是内存中的相同位置,100 = 0x64=0110 0100,默认小端模式,低地址存低字节,那么x1为00,x2为001,x3为011
2.枚举类型(enum)
实例:
从键盘输入一个整数,显示与该整数对应的枚举常量的英文名称。
# include <stdio.h>
int main()
{
enum weekday { sun, mon, tue, wed, thu, fri, sat } day;//声明了一个枚举类型enum weekday,可以用此类型来定义变量, 枚举元素本身由系统定义了一个表示序号的数值,
//从0开始顺序定义为0,1,2…。如在weekday中,sun值为0,mon值为1,…, sat值为6。并定义了一个枚举变量day,它的值只能是sum到sat之一
int k;
printf("input a number(0--6)");
scanf("%d", &k);
day = (enum weekday)k;//一个整数不能直接赋给一个枚举变量,必须强制进行类型转换才能赋值
switch (day)
{
case sun:printf("sunday/n");break;
case mon: printf("monday/n");break;
case tue:printf("tuesday/n");break;
case wed:printf("wednesday/n");break;
case thu:printf("thursday/n");break;
case fri: printf("friday/n");break;
case sat:printf("satday/n");break;
default:printf("input error/n");break;
}
return 0;
}
运行结果:
input a number(0-6)1
monday