C#中的相关的运算符及作用

来源:互联网 发布:北京市交通状况数据 编辑:程序博客网 时间:2024/06/03 03:10

C#运算符包括:

   1.算术运算符:

       a. " +":加法运算符,该运算符既可作为一元运算符也可作为二元运算符,一元+ 运算符是为所有数值类型预定义的。 对数值类型进行一元 + 运算的结果就是操作数的值。

 

为数值类型和字符串类型预定义了二元+ 运算符。 对于数值类型,+ 计算两个操作数之和。 当其中的一个操作数是字符串类型或两个操作数都是字符串类型时,+ 将操作数的字符串表示形式串联在一起。

 

  b. "–" : 减法运算符,此运算符既可作为一元运算符也可作为二元运算符, 数值类型的一元 - 运算的结果是操作数的反数。二元- 运算符是为所有数值类型和枚举类型预定义的,其功能是从第一个操作数中减去第二个操作数。委托类型也提供二元- 运算符,该运算符执行委托移除。

 

  c.  "*" : 乘法运算符 (*),用于计算操作数的积。另外还用作取消引用运算符,允许读取和写入指针。* 运算符还用来声明指针类型和取消引用指针。该运算符只能在不安全的上下文中使用,通过 unsafe 关键字的使用来表示,并且需要 /unsafe 编译器选项。 取消引用运算符也称为间接寻址运算符。

       d. "/" :除法运算符 (/) 用第二个操作数除第一个操作数。所有数值类型都具有预定义的除法运算符。两个整数相除的结果始终为一个整数。例如,5 除以 2 的结果为 2。 若要确定 5 除以 2 的余数,请使用 modulo 运算符 (%)。若要获取作为有理数或分数的商,应将被除数或除数设置为 float 类型或double 类型。 可以通过在数字后添加一个小数点来隐式执行此操作,如:5.1 / 2 。

       e. " %" :模数运算符 (%) 计算第二个操作数除第一个操作数后的余数。所有数值类型都具有预定义的模数运算符。

 2. 逻辑运算符
  a. "&" : 
此运算符既可作为一元运算符也可作为二元运算符,
为整型和bool 类型预定义了二进制“&” 运算符。 对于整型,“&”计算操作数的逻辑按位“与”。 对于 bool 操作数,“&” 计算操作数的逻辑“与”;也就是说,当且仅当两个操作数均为true 时,结果才为 true 。

 

  b. "|" : Binary|运算符是为整型和 bool 预定义的。对于整型,“|”计算操作数的按位“或”。对于 bool 操作数,“|”计算操作数的逻辑“或”;也就是说,当且仅当两个操作数均为false 时,结果才为 false

 

      c. "^" :二元 ^ 运算符是为整型和bool 类型预定义的。 对于整型,^ 将计算操作数的按位“异或”。 对于 bool 操作数,^ 将计算操作数的逻辑“异或”;也就是说,当且仅当只有一个操作数为true 时,结果才为 true。比如:“ true ^false" 返回“true” ; "false ^false ”将返回“false" ; "true ^ true "将返回“false” ;

 

      d. "~" :~ 运算符对操作数执行按位求补运算,其效果相当于反转每一位。按位求补运算符是为 int、uint、long 和 ulong 类型预定义的。

 3. 逻辑运算符:

     a " && " :条件“与”运算符 (&&) 执行其bool 操作数的逻辑“与”运算,但仅在必要时才计算第二个操作数。当都为true时才返回true否则返回false。

    b. "|| " :条件“或”运算符 (||) 执行bool操作数的逻辑“或”运算,但仅在必要时才计算第二个操作数。如:x || y 若x为true则后面不执行,都为false时才返回false,否则只要有一个为true则返回true;

    c." ! " : 逻辑非运算符 (!) 是对操作数求反的一元运算符, bool 定义了该运算符,当且仅当操作数为 false 时才返回true

  4. 移位运算符

       a. " << " : 左移运算符 (<<) 将第一个操作数向左移动第二个操作数指定的位数。第二个操作数的类型必须是一个 int 或具有向 int的预定义隐式数值转换的类型。如果第一个操作数是 int 或 uint(32 位数),则移位数由第二个操作数的低 5 位给出。也就是实际的 shift 计数为 0 到 31 位。如果第一个操作数是 long 或 ulong(64 位数),则移位数由第二个操作数的低 6 位给出。也就是实际的 shift 计数为 0 到 63 位。不在移位后第一个操作数类型范围内的任意高序位均不会使用,低序空位用零填充。移位操作从不导致溢出。第一个操作数的类型必须为用户定义的类型,第二个操作数的类型必须为int

 

      b. ">> " : 右移运算符 (>>) 将第一个操作数向右移动第二个操作数所指定的位数,如果第一个操作数为 int 或 uint(32 位数),则移位数由第二个操作数的低五位给出(第二个操作数 & 0x1f)。如果第一个操作数为 long 或 ulong(64 位数),则移位数由第二个操作数的低六位给出(第二个操作数 & 0x3f)。如果第一个操作数为 int 或 long,则右移位是算术移位(高序空位设置为符号位)。如果第一个操作数为 uint 或 ulong 类型,则右移位是逻辑移位(高位填充 0)。第一个操作数的类型必须为用户定义的类型,第二个操作数的类型必须为 int。

  5. 比较运算符

       a. " < " :所有数值和枚举类型都定义“小于”关系运算符 (<),如果第一个操作数小于第二个操作数,该运算符返回true,否则返回 false

       b. "> " : 所有数值类型和枚举类型都定义“大于”关系运算符>,如果第一个操作数大于第二个操作数,它将返回 true,否则返回false

       c. " <= " : 所有数值和枚举类型都定义了“小于等于”关系运算符 (<=),如果第一个操作数小于或等于第二个操作数,则该运算符将返回true,否则返回 false

 

       d. ">= " :所有数值类型和枚举类型都定义“大于等于”关系运算符 >=,如果第一个操作数大于或等于第二个操作数,该运算符将返回true,否则返回 false

   e. "  ==" : 对于预定义的值类型,如果操作数的值相等,则相等运算符 (==) 返回 true,否则返回false 对于 string 以外的引用类型,如果两个操作数引用同一个对象,则 == 返回 true 对于string 类型,== 比较字符串的值。

    f. "!=" :如果操作数相等,则不等运算符 (!=) 返回 false,否则,返回 true。为所有类型(包括字符串和对象)预定义了不等运算符。 用户定义的类型可重载 != 运算符。

   6.赋值运算符

     a. "–= " : 减法赋值运算符,x -= y 等效于 x = x - y,不同的是x 只计算一次。 - 运算符的含义取决于xy 的类型(例如,对于数值操作数,其含义为相减;对于委托操作数,其含义为移除)。

      b. "*=  " :二元乘法赋值运算符,x *= y 等效于x = x * y,不同的是x 只计算一次。
  c ." /= " :除法赋值运算符,x /= y 等效于x = x / y,不同的是x 只计算一次。
      d. "%= " :模块赋值运算符,x %= y等效于x = x % y,不同的是x 只计算一次,不能直接重载 %= 运算符。
   e. "&= " : 赋值运算符,x &= y等效于x = x & y,不同的是x 只计算一次。 & 运算符对整数操作数执行按位逻辑“与”运算,对bool 操作数执行逻辑“与”运算。

      f. "|= " :x |= y等效于x = x | y, | 运算符对整型操作数执行按位逻辑“或”运算,对布尔操作数执行逻辑“或”运算,不能直接重载|= 运算符。
    g. "^= " : 异或”赋值运算符,x ^= y等效于x = x ^ y,不同的是x 只计算一次。 ^ 运算符对整数操作数执行按位“异或”运算,对 bool 操作数执行逻辑“异或”运算,不能直接重载 ^= 运算符。

      h. "<<=" :左移赋值运算符,x <<= y相当于x = x << y,不同的是x 只计算一次。 << 运算符将x 向左移动 y 指定的位数,不能直接重载<<= 运算符。

     I. ">>= " :右移赋值运算符,x >>= y等效于x = x >> y,不同的是x 只计算一次。 >> 运算符根据y 指定的量对 x 进行右移位。

     j. "= " : 赋值运算符 (=) 将右操作数的值存储在左操作数表示的存储位置、属性或索引器中,并将值作为结果返回。操作数的类型必须相同(即右操作数必须可以隐式转换为左操作数的类型)。不能重载赋值运算符,不过,可为类型定义隐式转换运算符,这样就可以对这些类型使用赋值运算符。

     k. "+=" :加法赋值运算符,x += y 等效于x = x + y,不同的是x 只计算一次。 + 运算符的含义取决于xy 的类型(对于数值操作数,其含义为相加;对于字符串操作数,其含义为串联,等等),不能直接重载+= 运算符,+= 运算符还用于指定响应事件时要调用的方法;这类方法称为事件处理程序。在此上下文中使用 += 运算符称为“订阅事件”。

  7.增量和减量运算符

      a. " ++" : 递增运算符 (++) 将操作数加 1。

递增运算符可出现在操作数之前或之后:

第一种形式是前缀增量操作。该操作的结果是操作数加 1 之后的值。

第二种形式是后缀增量操作。该运算的结果是操作数增加之前的值。

数值类型和枚举类型具有预定义的增量运算符。用户定义的类型可重载 ++ 运算符。在枚举时通常允许整型运算。

     b. " --" :递减运算符 (--) 将操作数减 1。递减运算符可出现在操作数之前或之后:--variablevariable-- 第一种形式是前缀减量操作。该运算的结果是操作数减小“之后”的值。 第二种形式是后缀减量操作。 该运算的结果是操作数减小“之前”的值。数值类型和枚举类型具有预定义的增量运算符。用户定义的类型可重载,在枚举时通常允许整型运算。

 8.索引运算符(用于数组和索引器)

   a. " []" : 方括号 ([]) 用于数组、索引器和特性,也可用于指针,不能重载数组索引运算符;但类型可以定义采用一个或多个参数的索引器和属性。索引器参数括在方括号中,这一点与数组索引类似;但可以将索引器参数声明为任何类型,这一点与数组索引不同,后者必须为整形。

  9.数据类型转换运算符

     “() ”:除了用于指定表达式中运算符的顺序外,圆括号还用于执行以下任务:

1.指定强制转换或类型转换。

 

C#代码:
double x = 1234.7;
int a;
a = (int)x; // 将double类型的转化为int类型

2.调用方法或委托。

注释强制转换显式调用从一种类型到另一种类型的转换运算符;如果未定义这样的转换运算符,则强制转换将失败。强制转换表达式可能会使语法发生歧义。例如,表达式 (x)–y 既可以解释为强制转换表达式(将 –y 强制转换为类型 x),也可以解释为结合了带括号表达式的相加表达式(计算 x – y 的值)。

  10. 条件运算符 (三元运算符)
 “?: ”:条件运算符 (?:) 根据Boolean 表达式的值返回两个值之一,
condition 必须计算到truefalse如果 conditiontrue,则评估 first_expression 并将成为结果。如果 conditionfalse,则评估 second_expression 并将成为结果。只计算两个表达式之一。first_expressionsecond_expression 的类型必须相同,或者必须存在从一种类型到另一种类型的隐式转换。可通过使用条件运算符表达可能更确切地要求if-else结构的计算。条件运算符为右联运算符。表达式 a ? b : c ? d : e 按照a ? b : (c ? d : e) 而非 (a ? b : c) ? d : e 计算,不能重载条件运算符。

  11. 命名空间别名限定符

    “ :: ” : 命名空间别名限定符 (::) 用于查找标识符,通常放置在两个标识符之间,命名空间别名限定符可以是global 这将调用全局命名空间中的查找,而不是在别名命名空间中。

 12. 空接合运算符

    “??” :?? 运算符称为 null 合并运算符,用于定义可以为 null 值的类型和引用类型的默认值。如果此运算符的左操作数不为 null,则此运算符将返回左操作数;否则返回右操作数,可以为 null 的类型可以包含值,或者可以是未定义的。?? 运算符定义当可以为 null 的类型分配给非可以为 null 的类型时返回的默认值。如果在尝试将可以为 null 值的类型分配给不可以为 null 值的类型时没有使用 ?? 运算符,则会生成编译时错误。如果使用强制转换,且当前还未定义可以为 null 值的类型,则会引发 InvalidOperationException异常,即使 ??运算符的两个参数都是常量,也不能将其结果视为常量。

原创粉丝点击