【重走C#之路】之运算符(一)

1.[]运算符

    方括号([])用于数组、索引器和属性,也可用于指针。

    用于数组:数组类型是一种后跟[]的类型。

     int [] fib = new   int [ 100 ]; // 声明一个有100个元素的int数组

     若要访问数组的一个元素,则用方括号括起所需元素的索引。

     fib[ 0 ] = fib[ 1 ] = 1 ;
    
for ( int  i = 2 ;i < 100 ; ++ i) fib[i] = fib[i - 1 ] + fib[i - 2 ]; // 如果索引超出范围,则会引发异常

            不能重载数组索引运算符,但类型可定义采用一个或多个参数的索引器和属性。索引器参数括在方括号中,但索引器参数可声明为任何类型(数组索引必须为整数)。

       System.Collections.Hashtable h = new  System.Collections.Hashtable();
       h[
" a " ] = 123 ; // string类型索引

             方括号还用于指定属性:

       [attribute(AllowMultiple = true )] // 允许属性多次附加到指定类型上
       public   class  Attr
       {
       }

             可以使用方括号来指定指针索引:    

       unsafe   fixed  (  int *  p  =  fib )   
       {
           p[
0 =  p[ 1 =   1 ;
          
for int  i = 2 ; i < 100 ++ i ) p[i]  =  p[i - 1 +  p[i - 2 ];
       }

             不执行边界检查。

2.()运算符

            除了用于指定表达式中的运算符顺序、创建对象外,圆括号还用于指定强制转换或类型转换:

        double  x = 1234.7 ;
       
int  a;
       a
= ( int )x; // double转换为int

             强制转换显式调用从一种类型到另一种类型的转换运算符。不能重载()运算符。如果未定义这样的运算符,则强制转换将失败。强制转换表达式可能导致不明确的语法。

3..运算符

            点运算符(.)用于成员访问、指定类型或命名空间的成员。例,点运算符用于访问.NET Framework类库中的特定方法:

        System.Console.WriteLine( " hello " );

 4.::运算符

            命名空间别名限定符运算符用于查找标识符,它通常放置在两个标识符直接,如:

         global ::System.Console.WriteLine( " Hello World " ); // 调用全局命名空间中的查找,而不是在别名命名空间中

5.+运算符

            +运算符既可作为一元运算符也可作为二元运算符。

            一元+运算符是为所有数值类型预定义的,对值类型进行一元+运算的结果就是操作数的值。

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

            委托类型也提供二元+运算符,该运算符执行委托串联。

            用户定义的类型可重载+运算符。在枚举时通常允许整形运算。

 代码

 1           using  System;
 2           class  MainClass
 3          {
 4               static   void  Main() 
 5              {
 6                  Console.WriteLine( + 5 );         //  结果为:5
 7                  Console.WriteLine( 5   +   5 );      //  结果为:10
 8                  Console.WriteLine( 5   +  . 5 );     //  结果为:5.5
 9                  Console.WriteLine( " 5 "   +   " 5 " );  //  结果为:55
10                  Console.WriteLine( 5.0   +   " 5 " );  //  结果为:55
11              }
12          }

6.-运算符

            -运算符既可作为一元运算符也可作为二元运算符。

            一元-运算符是为所有数值类型预定义的,结果是操作数的反数。

            二元-运算符是为所有数值类型和枚举类型预定义的,其功能是从一个操作数中减去第二个操作数。

            委托类型也提供二元-运算符,该运算符执行委托移除。

            用户定义的类型可重载-运算符; 

代码
 1           using  System;
 2           class  MainClass
 3          {
 4               static   void  Main() 
 5              {
 6                   int  a  =   5 ;
 7                  Console.WriteLine( - a); // 结果为:-5
 8                  Console.WriteLine(a  -   1 ); // 结果为:4
 9                  Console.WriteLine(a  -  . 5 ); // 结果为:4.5
10              }
11          }
12 

7.*运算符

            乘法运算符(*),用于计算操作数的积、取消引用运算符,允许读取和写入指针。

            所有数值类型都具有预定义的乘法运算符。

            *运算符用来声明指针类型和取消引用指针(间接寻址运算符)。该运算符只能在不安全的上下文中使用,通过unsafe关键字来表示。 

代码
 1           using  System;
 2           class  MainClass
 3          {
 4               static   void  Main() 
 5              {
 6                  Console.WriteLine( 5   *   2 ); // 结果为:10
 7                  Console.WriteLine( - . 5   *  . 2 ); // 结果为:-0.1
 8                  Console.WriteLine( - .5m  *  .2m);  // 结果为:-0.10            
 9              }
10          }
11 

8./运算符

            除法运算符(/)用第二个操作数除第一个操作数,所有数值类型都具有预定义的除法运算符。 

代码

 1           using  System;
 2           class  MainClass
 3          {
 4               static   void  Main() 
 5              {
 6                  Console.WriteLine( - 5 / 2 ); // 结果为:-2
 7                  Console.WriteLine( - 5.0 / 2 ); // 结果为:-2.5
 8              }
 9          }
10 

9.%运算符

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

 1           using  System;
 2           class  MainClass
 3          {
 4               static   void  Main() 
 5              {
 6                  Console.WriteLine( 5   %   2 );        //  结果为:1
 7                  Console.WriteLine( - 5   %   2 );       //  结果为:-1
 8                  Console.WriteLine( 5.0   %   2.2 );    //  结果为:0.6
 9                  Console.WriteLine( 5.0m   %   2.2m );  //  结果为:0.6
10                  Console.WriteLine( - 5.2   %   2.0 );   //  结果为:-1.2
11              }
12          }
13 

10.&运算符

            &运算符既可作为一元运算符也可作为二元运算符。

            一元&运算符返回操作数的地址(要求unsafe上下文)。

            为整型和bool类型预定义了二进制&运算符。对于整型,&计算操作数的逻辑按位“与”。对于bool操作数,&计算操作数的逻辑“与”,即当且仅当两个操作数均为true,结果为true。

代码

 1               using  System;
 2               class  MainClass
 3              {
 4                   static   void  Main() 
 5                  {
 6                       int  i  =   0 ;
 7                       if  ( false   &   ++ ==   1 )
 8                      {
 9                           // ...
10                      }
11                      Console.WriteLine( true   &   false );  //  结果为:false
12                      Console.WriteLine( true   &   true );   //  结果为:true
13                      Console.WriteLine( " 0x{0:x} " 0xf8   &   0x3f );   //  结果为:0x38
14                  }
15              }
16 

11.|运算符

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

代码

 1           using  System;
 2           class  MainClass
 3          {
 4               static   void  Main() 
 5              {
 6                  Console.WriteLine( true   |   false );   //  结果为:true
 7                  Console.WriteLine( false   |   false );  //  结果为:false
 8                  Console.WriteLine( " 0x{0:x} " 0xf8   |   0x3f );    //  结果为:oxff
 9              }
10          }
11 

12.^运算符

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

代码

 1           using  System;
 2           class  MainClass 
 3          {
 4               static   void  Main() 
 5              {
 6                  Console.WriteLine( true   ^   false );   //  结果为:true
 7                  Console.WriteLine( false   ^   false );  //  结果为:false
 8                   //  Bitwise exclusive-or:
 9                  Console.WriteLine( " 0x{0:x} " 0xf8   ^   0x3f ); // 结果为:oxc7
10              }
11          }

 13.!运算符

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

14.~运算符

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

代码
 1               using  System;
 2               class  MainClass
 3              {
 4                   static   void  Main() 
 5                  {
 6                       int [] values  =  {  0 0x111 0xfffff 0x8888 0x22000022 };
 7                       foreach  ( int  v  in  values)
 8                      {
 9                          Console.WriteLine( " ~0x{0:x8} = 0x{1:x8} " , v,  ~ v);
10                      }
11                      /*
12                     结果:
13                     ~0x00000000 = 0xffffffff
14                     ~0x00000111 = 0xfffffeee
15                     ~0x000fffff = 0xfff00000
16                     ~0x00008888 = 0xffff7777
17                     ~0x22000022 = 0xddffffdd
18                      */
19               }
20           }

 15.=运算符

            赋值运算符(=)将右操作数的值存储在左操作数表示的存储位置、属性或索引器中,并将值作为结果返回。操作数的类型必须相同(或右边的操作数必须可以隐式转换为左边操作数的类型)。

16.<运算符

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

            用户定义的类型可重载<运算符,如果重载<运算符,则必须重载>。重载二元运算符时,会隐式重载相应的赋值运算符。

17.>运算符

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

            用户定义的类型可重载>运算符,如果重载>运算符,则必须重载<。重载二元运算符时,会隐式重载相应的赋值运算符。

18.?:运算符

            条件运算符(?:)根据bool类型表达式的值返回两个值中的一个。格式如下:           

       condition  ?  first_expression : second_expression;

             如果条件为true,则计算第一表达式并以它的计算结果为准;如果为false,则计算第二表达式并以它的计算结果为准。只计算两个表达式中的一个。

代码
 1           using  System;
 2           class  MainClass
 3          {
 4               static   double  sinc( double  x) 
 5              {
 6                   return  x  !=   0.0   ?  Math.Sin(x) / x :  1.0 ;
 7              }
 8 
 9               static   void  Main() 
10              {
11                  Console.WriteLine(sinc( 0.2 )); // 结果为:0.993346653975306
12                  Console.WriteLine(sinc( 0.1 )); // 结果为:0.998334166468282
13                  Console.WriteLine(sinc( 0.0 )); // 结果为:1
14              }
15          }

19.++运算符

            增量运算符(++)将操作数加1。增量运算符可以出现在操作数之前或之后。

            如果是前缀增量操作符,该操作的结果是操作数加1之后的值。

            如果是后缀增量操作符,该操作的结果是操作数增加之前的值。

            数值类型和枚举类型具有预定义的增量运算符。用户定义的类型可重载++运算符。

代码
 1           using  System;
 2           class  MainClass
 3          {
 4               static   void  Main() 
 5              {
 6                   double  x;
 7                  x  =   1.5 ;
 8                  Console.WriteLine( ++ x); // 结果为:2.5
 9                  x  =   1.5 ;
10                  Console.WriteLine(x ++ ); // 结果为:1.5
11                  Console.WriteLine(x); // 结果为:2.5
12              }
13          }

20.--运算符

            减量运算符(--)将操作数减1。

            前缀减量运算符运算的结果是操作数减小“之后”的值,后缀减量运算符的结果是操作数减小“之前”的值。

(未完待续)

你可能感兴趣的:(运算符)