位域的定义和位域变量的说明位域定义与结构定义相仿,其形式为:
struct 位域结构名
{ 位域列表 }
其中位域列表的形式为: 类型说明符 位域名:位域长度
2、示例:通过位域来计算IEEE754浮点数标准中,单精度浮点数的最大值、最小值以及最小弱规范数。
#include <stdio.h>typedef struct FP_SINGLE
{
unsigned __int32 fraction : 23
unsigned __int32 exp : 8
unsigned __int32 sign : 1
} fp_single
int main()
{
float x
fp_single * fp_s = (fp_single *)&x
fp_s->sign = 0
fp_s->exp = 0xfe
fp_s->fraction = 0x7fffff
printf ("float 最大数: %le\n",(double)x)
fp_s->sign = 0
fp_s->exp = 0x1
fp_s->fraction = 0x0
printf ("float 最小数: %le\n",(double)x)
fp_s->sign = 0
fp_s->exp = 0
fp_s->fraction = 0x1
printf ("float 最小弱规范数:%le\n\n",(double)x)
return 0
}
C语言中bit类型是“位”数据类型,一般在嵌入式软件中应用较多,用于IO口的控制,可以是单独申明位变量,也可以申请位结构数据类型,比如:
struct st_flash { /* struct FLASH */
union { /* FLMCR1 */
unsigned char BYTE /* Byte Access */
struct { /* Bit Access */
unsigned char FWE :1 /* FWE */
unsigned char SWE1:1 /* SWE1 */
unsigned char ESU1:1 /* ESU1 */
unsigned char PSU1:1 /* PSU1 */
unsigned char EV1 :1 /* EV1 */
unsigned char PV1 :1 /* PV1 */
unsigned char E1 :1 /* E1 */
unsigned char P1 :1 /* P1 */
} BIT
} FLMCR1
union { /* FLMCR2 */
unsigned char BYTE /* Byte Access */
struct { /* Bit Access */
unsigned char FLER:1 /* FLER */
unsigned char SWE2:1 /* SWE2 */
unsigned char ESU2:1 /* ESU2 */
unsigned char PSU2:1 /* PSU2 */
unsigned char EV2 :1 /* EV2 */
unsigned char PV2 :1 /* PV2 */
unsigned char E2 :1 /* E2 */
unsigned char P2 :1 /* P2 */
} BIT
} FLMCR2
union { /* EBR1 */
unsigned char BYTE /* Byte Access */
struct { /* Bit Access */
unsigned char EB7:1 /* EB7 */
unsigned char EB6:1 /* EB6 */
unsigned char EB5:1 /* EB5 */
unsigned char EB4:1 /* EB4 */
unsigned char EB3:1 /* EB3 */
unsigned char EB2:1 /* EB2 */
unsigned char EB1:1 /* EB1 */
unsigned char EB0:1 /* EB0 */
} BIT
} EBR1
union { /* EBR2 */
unsigned char BYTE /* Byte Access */
struct { /* Bit Access */
unsigned char EB15:1 /* EB15 */
unsigned char EB14:1 /* EB14 */
unsigned char EB13:1 /* EB13 */
unsigned char EB12:1 /* EB12 */
unsigned char EB11:1 /* EB11 */
unsigned char EB10:1 /* EB10 */
unsigned char EB9 :1 /* EB9 */
unsigned char EB8 :1 /* EB8 */
} BIT
} EBR2
}