zoukankan      html  css  js  c++  java
  • 表达式和运算符

    表达式和运算符

    表达式

    具有一个或多个操作数, 零个或多个运算符, 可以计算且结果为单个值、对象、方法或命名空间的代码片段。
    i++; 其中i为操作数, ++为运算符

    运算符

    按操作数可以分为

    • 一元运算符(++, new)
    • 二元运算符(+, -, *, /)
    • 三元运算符(条件运算符?:, 唯一一个三元运算符)

    按操作类型可以分为

    类型 符号表示
    基本运算符 X.y, f(x), a[x], x++, x--, new, typeof, checked, unchecked, default, delegate
    一元运算符 +, -, !, ~, ++x, --x, (T)x
    乘除运算符 *, /, %
    加减运算符 +, -
    移位运算符 <<, >>
    关系和类型检测运算符 <, >, <=, >=, is, as
    相等运算符 ==, !=
    逻辑运算符 &, ^, |
    条件运算符 &&, ||, ?:
    赋值运算符 =, +=, -=, *=, /=, %=, &=,

    其优先级从上到下依次增强, 相同优先级情况下, 左结合运算符从左到右顺序计算, 右结合运算符从右到从顺序计算. 在所有运算符当中, 赋值运算符和三元运算符是右结合运算符, 其他所有二元运算符都是左结合运算符. 建议多用括号进行优先级标记.

    另一点需要注意的是,相等运算符对于值类型数据的判断,判断依据是两个操作数的值是否相等。而对于引用类型的操作数而言,大多数情况下比较的是它们的引用,而不管它们引用的对象。但也有例外,string类型是引用类型,但string类型之间比较的是字符串长度和它们的值(因为在string中的相等运算符进行了重载,实际使用的是equal),其中值是大小写敏感的。

    运算符重载

    所有运算符重载均为类的静态方法,且必须使用public进行修饰

    //一元运算符重载

    public static 自定义类型 operator 要重载的运算符(类型)

    public static OperatorSample operator +(OperatorSample obj)

    //二元运算符重载

    public static 自定义类型 operator 要重载的运算符(类型1,类型2)

    public static OperatorSample operator +(OperatorSample obj1, OperatorSample obj2)

    以下必须成对重载

    • ==, !=

    • <, >

    • <=, >=

    可重载的运算符

    一元运算符:+, -, !, ~, ++, --, true, false

    二元运算符:+, -, *, /, %, &, |, ^, <<, >>, ==, !=, >, <, >=, <=

    条件逻辑运算符不能重载,但可使用能够重载的&和|进行计算, 数组索引运算符不能重载,但可定义索引器, 转换运算符不能重载, 但可定义新的转换运算符(使用explicit和implicit关键字)

    不能重载的运算符

    =, ., ?:, ->, new, is, sizeof, typeof

  • 相关阅读:
    web十二讲,CSS样式
    web第十一讲,div与span
    web第十讲,CSS基础
    git 版本回退后再恢复
    git 变更远程仓库及在本地的别名
    使用FastClick插件,无法监听双击事件
    声明式编程的没落
    gradle 很棒
    评 PowerShell
    VB 的一些歧义(不断更新)
  • 原文地址:https://www.cnblogs.com/home-wang/p/10943387.html
Copyright © 2011-2022 走看看