运算符是一种告诉编译器执行特定的数学或逻辑操作的符号。C# 有丰富的内置运算符,分类如下:

  • 算术运算符
  • 关系运算符
  • 逻辑运算符
  • 位运算符
  • 赋值运算符
  • 其他运算符

    算术运算符

    运算符:A=10,B=20 描述 实例
    + 把两个操作数相加 A + B 将得到 30
    - 从第一个操作数中减去第二个操作数 A - B 将得到 -10
    * 把两个操作数相乘 A * B 将得到 200
    / 分子除以分母 B / A 将得到 2
    % 取模运算符,整除后的余数 B % A 将得到 0
    ++ 自增运算符,整数值增加 1 A++ 将得到 11
    -- 自减运算符,整数值减少 1 A-- 将得到 9

    关系运算符

    运算符:A=10,B=20 描述 实例
    == 检查两个操作数的值是否相等,如果相等则条件为真。 (A == B) 不为真。
    != 检查两个操作数的值是否相等,如果不相等则条件为真。 (A != B) 为真。
    > 检查左操作数的值是否大于右操作数的值,如果是则条件为真。 (A > B) 不为真。
    < 检查左操作数的值是否小于右操作数的值,如果是则条件为真。 (A < B) 为真。
    >= 检查左操作数的值是否大于或等于右操作数的值,如果是则条件为真。 (A >= B) 不为真。
    <= 检查左操作数的值是否小于或等于右操作数的值,如果是则条件为真。 (A <= B) 为真。

    逻辑运算符

    运算符:A=true,B=false 描述 实例
    && 称为逻辑与运算符。如果两个操作数都非零,则条件为真。 (A && B) 为假。
    || 称为逻辑或运算符。如果两个操作数中有任意一个非零,则条件为真。 (A || B) 为真。
    ! 称为逻辑非运算符。用来逆转操作数的逻辑状态。如果条件为真则逻辑非运算符将使其为假。 !(A && B) 为真。

    位运算符

    位运算符作用于位,并逐位执行操作。&、 | 和 ^ 的真值表如下所示:

    p q p & q p | q p ^ q
    0 0 0 0 0
    0 1 0 1 1
    1 1 1 1 0
    1 0 0 1 1
    //假设如果 A = 60,且 B = 13,现在以二进制格式表示,它们如下所示:
    A =
    B =
    //-----------------
    A&B =
    A|B =
    A^B =
    ~A =
    运算符:A=60,B=13 描述 实例
    & 如果同时存在于两个操作数中,二进制 AND 运算符复制一位到结果中。 (A & B) 将得到 12,即为 0000 1100
    | 如果存在于任一操作数中,二进制 OR 运算符复制一位到结果中。 (A | B) 将得到 61,即为 0011 1101
    ^ 如果存在于其中一个操作数中但不同时存在于两个操作数中,二进制异或运算符复制一位到结果中。 (A ^ B) 将得到 49,即为 0011 0001
    ~ 二进制补码运算符是一元运算符,具有"翻转"位效果,即0变成1,1变成0。 (~A ) 将得到 -61,即为 1100 0011,一个有符号二进制数的补码形式。
    << 二进制左移运算符。左操作数的值向左移动右操作数指定的位数。 A << 2 将得到 240,即为 1111 0000
    >> 二进制右移运算符。左操作数的值向右移动右操作数指定的位数。 A >> 2 将得到 15,即为 0000 1111
    using System;
    namespace OperatorsAppl
    {
    class Program
    {
    static void Main(string[] args)
    {
    int a = ; /* 60 = 0011 1100 */
    int b = ; /* 13 = 0000 1101 */
    int c = ; c = a & b; /* 12 = 0000 1100 */
    Console.WriteLine("Line 1 - c 的值是 {0}", c ); c = a | b; /* 61 = 0011 1101 */
    Console.WriteLine("Line 2 - c 的值是 {0}", c); c = a ^ b; /* 49 = 0011 0001 */
    Console.WriteLine("Line 3 - c 的值是 {0}", c); c = ~a; /*-61 = 1100 0011 */
    Console.WriteLine("Line 4 - c 的值是 {0}", c); c = a << ; /* 240 = 1111 0000 */
    Console.WriteLine("Line 5 - c 的值是 {0}", c); c = a >> ; /* 15 = 0000 1111 */
    Console.WriteLine("Line 6 - c 的值是 {0}", c);
    Console.ReadLine();
    }
    }
    }

    赋值运算符

    运算符 描述 实例
    = 简单的赋值运算符,把右边操作数的值赋给左边操作数 C = A + B 将把 A + B 的值赋给 C
    += 加且赋值运算符,把右边操作数加上左边操作数的结果赋值给左边操作数 C += A 相当于 C = C + A
    -= 减且赋值运算符,把左边操作数减去右边操作数的结果赋值给左边操作数 C -= A 相当于 C = C - A
    *= 乘且赋值运算符,把右边操作数乘以左边操作数的结果赋值给左边操作数 C *= A 相当于 C = C * A
    /= 除且赋值运算符,把左边操作数除以右边操作数的结果赋值给左边操作数 C /= A 相当于 C = C / A
    %= 求模且赋值运算符,求两个操作数的模赋值给左边操作数 C %= A 相当于 C = C % A
    <<= 左移且赋值运算符 C <<= 2 等同于 C = C << 2
    >>= 右移且赋值运算符 C >>= 2 等同于 C = C >> 2
    &= 按位与且赋值运算符 C &= 2 等同于 C = C & 2
    ^= 按位异或且赋值运算符 C ^= 2 等同于 C = C ^ 2
    |= 按位或且赋值运算符 C |= 2 等同于 C = C | 2

    其他运算符

    运算符 描述 实例
    sizeof() 返回数据类型的大小。 sizeof(int),将返回 4.
    typeof() 返回 class 的类型。 typeof(StreamReader);
    & 返回变量的地址。 &a; 将得到变量的实际地址。
    * 变量的指针。 *a; 将指向一个变量。
    ? : 条件表达式 三目表达式,true,false?X:Y,如果条件为真 ? 则为 X : 否则为 Y
    is 判断对象是否为某一类型。 If( Ford is Car) // 检查 Ford 是否是 Car 类的一个对象。
    as 强制转换,即使转换失败也不会抛出异常。 Object obj = new StringReader("Hello");
    StringReader r = obj as StringReader;
    Console.WriteLine("int 的大小是 {0}", sizeof(int));      //int 的大小是 4
    Console.WriteLine("short 的大小是 {0}", sizeof(short)); //short 的大小是 2
    Console.WriteLine("double 的大小是 {0}", sizeof(double));//double 的大小是 8

    C# 中的运算符优先级

    类别  运算符  结合性 
    后缀  () [] -> . ++ - -   从左到右 
    一元  + - ! ~ ++ - - (type)* & sizeof  从右到左 
    乘除  * / %  从左到右 
    加减  + -  从左到右 
    移位  << >>  从左到右 
    关系  < <= > >=  从左到右 
    相等  == !=  从左到右 
    位与 AND  从左到右 
    位异或 XOR  从左到右 
    位或 OR  从左到右 
    逻辑与 AND  &&  从左到右 
    逻辑或 OR  ||  从左到右 
    条件  ?:  从右到左 
    赋值  = += -= *= /= %=>>= <<= &= ^= |=  从右到左 
    逗号  从左到右 

最新文章

  1. JAVA学习笔记(一):一个小爬虫的例子
  2. HashedWheelTimer 原理
  3. CentOS:安装桌面GNOME图形化界面
  4. Poj(2679),SPFA,邻接表(主流写法)
  5. (六)动手写第一个shell
  6. php29号小结(隔行换色&#183;&#183;&#183;&#183;&#183;&#183;)
  7. Spring MVC 3.0 返回JSON数据的方法
  8. 框架计划随笔 三.EntityFramework在传统事务脚本模式下的使用
  9. map,set的模板[STL]
  10. Page directive must not have multiple occurrences of pageencoding
  11. async和enterproxy控制并发数量
  12. css布局--水平垂直居中
  13. 原生JS实现几个常用DOM操作API
  14. Docker 服务
  15. qt 窗口鼠标穿透
  16. office word memo
  17. java io系列18之 CharArrayReader(字符数组输入流)
  18. ADC配置成定时器触发的启发
  19. 【转】spring boot mybatis 读取配置文件
  20. LearnOpenGL学习笔记(三)——VBO,VAO,EBO理解

热门文章

  1. 如何寻找linux下相关软件
  2. 看不见的攻击面:查看 SQLite 数据库就中招?
  3. 【转载】C# Graphics类具体解释
  4. [转]Unity手游之路&lt;十二&gt;手游资源热更新策略探讨
  5. Oracle中Select语句完整的执行顺序
  6. Angular4学习笔记(一)-环境搭建
  7. 卡通渲染Shader
  8. IntelliJ IDEA出现Search for无法进入编辑状态
  9. GoLang之strings、buffers、bytes、binary包
  10. [AWS] Amazon Cognito