C#表达式和运算符详解

表达式

表达式由运算符和操作数组成,运算符设置对操作数进行什么样的操作

 int i =927;
 int j=i+10;

运算符

运算符针对操作数进行计算,同时产生计算结果,运算符是一种专门用来处理数据运算的特殊符号,数据变量结合运算符形成完整的程序运算语句
- 算术运算符
+、-、*、/、%这些都称为算术运算符,分别用于加、减、乘、除、取余运算。

 int i=0;

 int j=i+10;
 int j=i-10;
 int j=i*10;
 int j=i/10;
 int j=i%10;

 int j=i++;后缀增量操作,该运算结果是操作数增加之前的值,j=0。
 int j=++i;前缀增量操作,该运算结果是操作数增加之后的值,j=1i--,--i,与此操作方式一样
 Math.DivRem();利用Math.DivRem()方法取余数,具体参数F12看定义

 用算术运算符运算时,运算结果可能会超出所涉及值类型的值范围。需要注意
  • 赋值运算符
    赋值运算符为变量、属性、事件等元素赋值,赋值运算要求两边类型必须一致

  • 逻辑运算符
    逻辑运算符对两个表达式执行布尔逻辑操作,C#中的逻辑运算符大体可以分为:按位逻辑运算符布尔逻辑运算符

    按位“与”运算符(&):比较两个整数的相应位,当两个数的对应位都是1时,返回相应的结果是1;当两个数的对应位都是0或者其中一个位是0时,返回相应的结果是0;【都1是1,有0全0】;

        static void Main(string[] args)
        {
            /*
             * 注解:
             * 十进制数1对应的二进制数为 00000001
             * 十进制数85对应的二进制数为 01010101
             * 根据按位“与”运算的定义得出(1&85)="00000001"(二进制就是1)
             * 故iseven=False;
             */
            int num1 = 1;
            int num2 = 85;
            bool iseven;
            iseven = (num1 & num2) == 0;
            Console.WriteLine(iseven);
            Console.ReadKey();
        }

按位“或”运算符(|):比较两个整数的相应位,当两个数的对应位有一个是1或都是1时,返回相应的结果是1;当两个数的对应位都是0时,返回相应的结果是0;【有1是1,全0是0】

        static void Main(string[] args)
        {
            /*
             * 注解:
             * 十进制数1对应的二进制数为 00000001
             * 十进制数85对应的二进制数为 01010101
             * 根据按位“或”运算的定义得出(1|85)="01010101"(二进制就是85)
             */
            int num1 = 1;
            int num2 = 85;
            Console.WriteLine((num1 | num2));
            Console.ReadKey();
        }

按位“异或”运算符(^):比较两个整数的相应位,当两个整数的对应位一个是1另外一个是0时,返回相应的结果为是1;当两个整数的相应位都是1或者都是0时,则返回相应的结果位是0;【[1,0]是1;[1,1][0,0]是0】

        static void Main(string[] args)
        {
            /*
             * 注解:
             * 十进制数1对应的二进制数为 00000001
             * 十进制数85对应的二进制数为 01010101
             * 根据按位“异或”运算的定义得出(1^85)="01010100"(二进制就是84) 
             */
            int num1 = 1;
            int num2 = 85;
            Console.WriteLine((num1 ^ num2));
            Console.ReadKey();
        }

布尔“与”运算符(&):计算两个布尔表达式,两个表达式结果都为真时,返回真;否则,返回假;

        static void Main(string[] args)
        {
            string name = "akon";
            int age = 20;
            if (name == "akon" & age == 20)//判断两个表达式结果
            {
                //True;
            }
            else
            {
                //False;
            }
        }
        static void Main(string[] args)
        {
            string name = "akon";
            int age = 20;
            if (name == "akon" && age == 20)
            {
                //True;
            }
            else
            {
                //False;
            }
        }

&和&&区别在于:&是两个条件都判断,最后返回结果;&&是先判断第一个表达式,如果结果为假,就不判断之后的表达式了

布尔“或”运算符(|):计算两个布尔表达式,两个表达式有一个为真时,返回真;两个表达式结果都是假时,返回假;

        static void Main(string[] args)
        {
            string name = "akon";
            int age = 20;
            if (name == "akon" | age == 30)
            {
                //True;
            }
            else if (name == "Akon" | age == 30)
            {
                //False;
            }
        }
        static void Main(string[] args)
        {
            string name = "akon";
            int age = 20;
            if (name == "akon" || age == 30)
            {
                //True;
            }
            else if (name == "Akon" || age == 30)
            {
                //False;
            }
        }

|和||区别在于:|是两个条件都判断,最后返回结果;||是先判断第一个表达式,如果结果为真,就不判断之后的表达式了

布尔“异或”运算符(^):计算两个布尔表达式,只有两个表达式一个为真另一个为假时,结果才是真,两个表达式结果都是假或者都是真时,结果为假;

        static void Main(string[] args)
        {
            string name = "akon";
            int age = 20;
            if (name == "akon" ^ age == 30)
            {
                //True;
            }
            else if (name == "akon" | age == 20)
            {
                //False;
            }
        }

移位运算符(<<,>>):用于执行移位运算,分别称为左移运算右移运算

  static void Main(string[] args)
  {
    int i = 10;
    Console.WriteLine(Convert.ToString(i, 2)); //10的二进制 00001010
   /*
   *左移:
   *如果第一个操作数是int或者uint(32位),则移位数由第二个操作数的低5位给出
   *如果第一个操作数是long或者ulong(64位),则移位数由第二个操作数的低6位给出
   */
   int j = i << 2;左移两位:00101000;(低次位丢失,高次位补零)
   /*
   *右移:
   *如果第一个操作数是int或者uint(32位),则移位数由第二个操作数的低5位给出
   *如果第一个操作数是long或者ulong(64位),则移位数由第二个操作数的低6位给出
   *如果第一个操作数是int或者long,则右移位是算数移位(高序空位设置为字符位)
   *如果第一个操作数是uint或者ulong,则右移位是逻辑移位(高位填充0)
   */
   int j = i >> 2;//右移两位:00000010;(低次位丢失,高次位补零)
   Console.WriteLine(j);
   Console.ReadKey();
  }


  • 其他特殊运算符

is运算符:用于检查变量是否为指定类型;
 int i=10;
 bool result=i is int;

条件运算符(又叫三元运算符):根据布尔表达式的值返回两个值其中一个;

int i=10;
int j=i==10?12:13;

new运算符:用于创建一个新的类型实例

strint [] array=new string[3];

typeof运算符:用于获得系统原型对象的类型,也就是Type对象;

Console.WriteLine(typeof(string));

实际开发中要根据实际情况注意运算符的优先级问题

你可能感兴趣的:(c#基础笔记)