求人帮了解一段代码

求人帮理解一段代码
  private void buttonBold_Click(object sender, EventArgs e)
        {
            Font oldfont;
            Font newfont;
            oldfont = this.richTextBox1.SelectionFont ;
            if (oldfont .Bold)
            {
                newfont = new Font(oldfont, oldfont.Style &   ~FontStyle.Bold);
            }
            else
            {
                newfont = new Font(oldfont, oldfont.Style | FontStyle.Bold);
            }
            this.richTextBox1.SelectionFont = newfont;
            richTextBox1.Focus();
        }
这段代码,就是做了个按钮,然后能在加粗和不加粗之间切换,但是为什么是用&和|呢,特别是第二个为什么不能也用&呢?
------解决思路----------------------
楼主不熟悉&和
------解决思路----------------------
的操作哈~ 
简单理解 & 就是带排斥,两者只能存在一个,而 
------解决思路----------------------
 比较大度,操作数中任何一个都可以~ 
以上只是玩笑解析~ 
------解决思路----------------------
友情帮顶求人帮了解一段代码
------解决思路----------------------
以前有过帖子 参考
------解决思路----------------------
我们用一个数表示字体风格,其中每个二进制位相当于一个开关。

那么我们用 
------解决思路----------------------
  可以打开这个开关(无论之前它是不是已经打开了),因为1和0或者1做
------解决思路----------------------
都是1。
用& ~可以关闭它。因为0无论和1还是和0做&都是0
------解决思路----------------------
&和
------解决思路----------------------
不同于&&和
------解决思路----------------------