private void buttonBold_Click(object sender, EventArgs e)
        {
            Font oldFont;
            Font newFont;
            oldFont = this.richTextBoxText.SelectionFont;            if (oldFont.Bold)
                newFont = new Font(oldFont, oldFont.Style & ~FontStyle.Bold);
            else
                newFont = new Font(oldFont, oldFont.Style | FontStyle.Bold);            this.richTextBoxText.SelectionFont = newFont;
            this.richTextBoxText.Focus();
            
        }
代码如上;实现增加黑体字,但是在~FontStyle在前面加个“~”有什么意图呢?请教一下这低级问题,谢谢。

解决方案 »

  1.   

    oldFont.Style   &   ~FontStyle.Bold &是二进制按位与运算符,~是二进制按位取反运算符。 
      

  2.   

    Go
    ~   运算符对操作数执行按位求补运算,其效果相当于反转每一位 
    &   运算符既可作为一元运算符也可作为二元运算符。一元   &   运算符返回操作数的地址 
    为整型和   bool   类型预定义了二进制   &   运算符。对于整型,&   计算操作数的逻辑按位“与”。对于   bool   操作数,&   计算操作数的逻辑“与”;也就是说,当且仅当两个操作数均为   true   时,结果才为   true。   &   运算符计算两个运算符,与第一个操作数的值无关。 
      

  3.   

    在代码里面调试下看看按位取反的 ~FontStyle.Bold  是什么值
      

  4.   

    简单的解释
    假设字体有属性是否粗体,是否斜体,是否下划线3个
    分别以二进制位中的第3,1,1位表示
    0111就是三个属性都为真,0000都是假代表粗体为真的数字就是0100,也就是4
    代表斜体   就是       0010 ,2
    代表下划线 就是       0001, 1
    所以想设置同时粗体并且斜体,那就是 4 | 2 = 6 (0110)而你上面的程序是启用/禁用粗体,当前字体已经是粗体,那就要禁用粗体
    粗体取反 ~4= -5 (1011) 在与其他属性做与运算,~4 & 6=2 (0010)明白了么
      

  5.   

    ~ 运算符(C# 参考)
    Visual Studio 2005 其他版本  Visual Studio 2010 Visual Studio 2008 ~ 运算符对操作数执行按位求补运算,其效果相当于反转每一位。按位求补运算符是为 int、uint、long 和 ulong 类型预定义的。备注
    --------------------------------------------------------------------------------用户定义的类型可重载 ~ 运算符。有关更多信息,请参见 operator。在枚举时通常允许整型运算。示例
    --------------------------------------------------------------------------------复制// cs_operator_bitwise_compl.cs
    using System;
    class MainClass
    {
        static void Main() 
        {
            int[] values = { 0, 0x111, 0xfffff, 0x8888, 0x22000022};
            foreach (int v in values)
            {
                Console.WriteLine("~0x{0:x8} = 0x{1:x8}", v, ~v);
            }
        }
    }
    输出
    --------------------------------------------------------------------------------~0x00000000 = 0xffffffff
    ~0x00000111 = 0xfffffeee
    ~0x000fffff = 0xfff00000
    ~0x00008888 = 0xffff7777
    ~0x22000022 = 0xddffffdd
    http://msdn.microsoft.com/zh-cn/library/d2bd4x66(v=VS.80).aspx
      

  6.   

    http://zhidao.baidu.com/question/22458786.html?si=3