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

时间:2017-03-13 00:05:13

标签: bit-manipulation bitwise-operators bit-fields

我经常阅读有关按位操作的内容,但是,我仍然无法理解这一行。

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

似乎作者试图确保此文本没有BOLD和ITALIC的样式,然后他将文本设为ITALIC和BOLD。

我是对的,还是遗漏了一些细节?

3 个答案:

答案 0 :(得分:2)

不,你已经得到了; &操作正在删除BOLDITALIC位,而|操作会设置它们。

答案 1 :(得分:2)

似乎关闭了所有不是BOLD而不是ITALIC的旗帜(通过补充的&),然后确保BOLD | ITALIC已设置(通过{ {1}})。

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

可以重写为

text

答案 2 :(得分:2)

让我们从4位标志开始。

BOLD = 0001; ITALIC = 0010

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

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