这个位明智的操作在做什么?

What does this bit wise operation doing?

我读了很多关于按位运算的内容,但我仍然无法赋予这一行意义。

((text.flags & ~Text.BOLD) & ~Text.ITALIC) | Text.BOLD | Text.ITALIC

作者似乎是想确保此文本没有粗体和斜体样式,然后他将文本设为斜体和粗体。

我说得对吗,还是漏掉了一些细节?

不,你知道了; & 操作擦除 BOLDITALIC 位,而 | 操作设置它们。

它似乎正在关闭所有不是 BOLDITALIC 的标志(通过 & 和补码),然后确保 BOLD | ITALIC 已设置(通过 |).

最终结果是,对于任何输入 text,无论样式如何,输出都是 text

可以重写为

int bold_italic = Text.BOLD | Text.ITALIC;
text.flags = (text.flags & ~bold_italic) | bold_italic;

让我们从 4 位标志开始。

BOLD = 0001; ITALIC = 0010

flags & ~BOLD =   
flags & ~0001 = 
flags & 1110 = clear BOLD flag.

flags | ITALIC = 
flags | 0010 = 
flags | 0010 = set ITALIC flag