就像其他人所说的那样,它们是按位运算符。 FontStyle
是一个位域(标志集)。
oldf.Style & ~FontStyle.Bold
这意味着“删除粗体”,但查看底层数学,你会得到这样的东西。
(a) FontStyle.Bold = 0b00000010; // just a guess, it doesn't really matter
(b) oldf.Style = 0b11100111; // random mix here
// we want Bold "unset"
(c) ~FontStyle.Bold = 0b11111101;
=> (b) & (c) = 0b11100101; // oldf without Bold
new Font(oldf, oldf.Style | FontStyle.Bold)
这意味着我们要加粗字体。通过将其与存在值进行或运算(这也意味着已经为粗体的内容将保持粗体)。
(a) FontStyle.Bold = 0b00000010; // just a guess, it doesn't really matter
(b) oldf.Style = 0b11100000; // random mix here
=> (b) | (c) = 0b11100010; // oldf with Bold