zhenykun 发表于 2022-10-14 20:59

PIC单片机位数组定义问题

我在写c程序时想定义一个位数组,但是苦于不知道如何定义及使用...纳闷好半天,有没有大佬知道要如何用呢?

wyjie 发表于 2022-10-14 21:00


typedef union
{
   unsigned char Byte;
   struct
   {
         unsigned char Bit0:1;
         unsigned char Bit1:1;
         unsigned char Bit2:1;
         unsigned char Bit3:1;
         unsigned char Bit4:1;
         unsigned char Bit5:1;
         unsigned char Bit6:1;
         unsigned char Bit7:1;
   }bits;
}BYTE;

llljh 发表于 2022-10-14 21:02

有很多问题,其实baidu一下也会有答案的

wuhany 发表于 2022-10-14 21:05

定义一个位数组
联合体啊

jiajs 发表于 2022-10-14 21:10

你可以看,很多头文件里面就有这种用法。

gongche 发表于 2022-10-14 21:13

位段,C语言允许在一个结构体中以位为单位来指定其成员所占内存长度

zhuhuis 发表于 2022-10-14 21:17

这种以位为单位的成员称为“位段”或称“位域”( bit field) 。

dengdc 发表于 2022-10-14 21:19

利用位段能够用较少的位数存储数据。

wyjie 发表于 2022-10-14 21:22

struct CHAR
{
    unsigned int ch   : 8;    //8位
    unsigned int font : 6;    //6位
    unsigned int size : 18;   //18位
};
struct CHAR ch1;

dingy 发表于 2022-10-14 21:25

通常, 我们用下面的语句来说明这些变量:
char f1,f2,f3;
unsigned int type;
unsigned int index;

但是, 实际上标志 f1, f2, f3 分别只需要 1 位。变量 type 只需要 4 位, 而变量 index 只需要 9 位。 总共是 16位 ---- 2 个字节。我们用两个字节就够了。

我们可这样来做:
struct packed_struct
{
    unsigned int f1 :1;
    unsigned int f2 :1;
    unsigned int f3 :1;
    unsigned int type :4;
    unsigned int index :9;
};

huanghuac 发表于 2022-10-14 21:27

这个 度娘就能解决吧

zhanghqi 发表于 2022-10-14 21:31

#define SetBit(A,k)   ( A[(k)/8] |= (1 << ((k)%8)) )
#define ClearBit(A,k)   ( A[(k)/8] &= ~(1 << ((k)%8)) )

uint8_t array;
SetBit(array,10);
ClearBit(array,10);

stly 发表于 2022-10-14 21:34

额 这个很简单

renyaq 发表于 2022-10-14 21:36


定义一个位数组

zyf部长 发表于 2022-10-14 21:37

简单的C语言啊

chuxh 发表于 2022-10-14 21:44

百度一抓一大把啊

renyaq 发表于 2022-10-14 21:47

什么叫做位数组啊
页: [1]
查看完整版本: PIC单片机位数组定义问题