gpt4 book ai didi

c++ - 掩蔽的工作原理

转载 作者:可可西里 更新时间:2023-11-01 14:52:50 24 4
gpt4 key购买 nike

我是 C 语言的新手,我正在使用源代码进行调试。但是,我对这段代码感到困惑。

当值被赋值给结构值时,我认为是一些掩码。但不确定,如果它是掩蔽的。掩蔽在这个概念中是如何工作的?

非常感谢,

#define MSGINFO_ENABLE                   0x01
#define MIME_ENABLE 0x02
#define FASTSTART_CODERS_IN_OFFERED 0x04
#define TRANSADDR_ENABLE 0x08

typedef struct {

unsigned int msginfo_mask; /* added in version 0x0101 */

} VIRTBOARD;


VIRTBOARD VirtBoard;

/* Not sure I understand what is happening here. */
VirtBoard.msginfo_mask = MSGINFO_ENABLE | MIME_ENABLE | FASTSTART_CODERS_IN_OFFERED | TRANSADDR_ENABLE;

最佳答案

用简单的英语就可以了:

十六进制数 0x01、0x02、0x04、0x08 均被选中,因为它们各自被编码为不同的单个位并设置为二进制。没有位图重叠,因此可以读取和设置每个位图而不受其他位的影响。在您的代码中添加以下注释可以更清楚地了解正在发生的事情:

#define MSGINFO_ENABLE                   0x01  // => 0001
#define MIME_ENABLE 0x02 // => 0010
#define FASTSTART_CODERS_IN_OFFERED 0x04 // => 0100
#define TRANSADDR_ENABLE 0x08 // => 1000

现在在另一行显示结果之前添加注释:

// VirtBoard.msginfo_mask |= 0001 
// VirtBoard.msginfo_mask |= 0010
// VirtBoard.msginfo_mask |= 0100
// VirtBoard.msginfo_mask |= 1000
// ----
// VirtBoard.msginfo_mask == 1111
VirtBoard.msginfo_mask = MSGINFO_ENABLE |
MIME_ENABLE |
FASTSTART_CODERS_IN_OFFERED |
TRANSADDR_ENABLE;

虽然作业上的注释清楚地说明了正在发生的事情,但一旦您理解了正在发生的事情,这些注释就有点违背了以符号方式定义常量的目的。

关于c++ - 掩蔽的工作原理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1242585/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com