术语:什么是面具,什么是旗帜

Terminology: What's a mask and what's a flag

我没有接受过编程方面的教育,我是自学的。但是我在网上找不到的是旗帜和面具有什么区别。

我理解按位运算符的逻辑,只是不懂术语。

例如:

int READ_BIT_POSITION = 0x1; // is this a mask?
int WRITE_BIT_POSITION = 0x2; // is this a mask?
int bits = //..// // is this a flag (or flags)?

int read = bits & READ_BIT_POSITION; // or is this a flag?

抱歉这个菜鸟问题。

标志通常是一个字中的一位。

掩码通常是一个或多个位,用于从字中删除其他位。

可能会有一些重叠,例如在某些情况下,单个位可以用作标志或掩码。但是,不能将设置了多个位的掩码描述为标志。

在你的例子中:

int read = bits & READ_BIT_POSITION;

READ_BIT_POSITION 被用作单个位 mask 这将导致 read 包含 1 位 flagbits 中提取(并排除它可能包含的任何其他位)。

掩码定义您感兴趣(或不感兴趣)的值中的位。标志是该值中代表某物的一个或多个位。

您使用掩码 read/write 标志值。例如如果你在墙上画字,面具就是你用来标记字符去向的纸模板,而旗帜就是你想在墙上画的确切字符。