c语言中如何定义一个bit?

Python019

c语言中如何定义一个bit?,第1张

1、在c语言定义bit型变量,可以使用位域来自定义。

位域的定义和位域变量的说明位域定义与结构定义相仿,其形式为:

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

}