4. 表达式与运算符

1 表达式

表达式是由运算符和操作数组成的。+、-、*、/ 都是运算符。操作数包括文本、常量、变量、表达式。

2 运算符

2.1 算数运算符

运算符 名称 备注
+ 、-、*、/ 加减乘除
% 取余 在获取两个数相除的余数时,除了使用%运算符,还可以用Math类中的DivRem方法来实现,如 a = c%d 可以写成 Math.DivRem(b,c,out a)
++ 增量运算符 分前缀增量操作和后缀增量操作
减量运算符 分前缀减量操作和后缀减量操作

2.2 赋值运算符

运算符 名称 运算符 名称 运算符 名称
= 等于 += 加等于 -= 减等于
*= 乘等于 /= 除等于 %= 取余等于
&= 位与 |= 位或
>>= 右移 <<= 左移 ^= 异或

赋值运算符的左操作数必须是变量、属性访问、所引器访问、事件访问 类型的表达式,如果赋值运算符俩边的操作数类型不一致,就需要先进行类型转换再赋值。
在使用赋值运算符时,右操作数表达式所属的类型必须可以隐式转换为左操作数所属类型。

2.3 关系运算符

关系运算符属于二元运算符,用于程序中的变量之间、变量和自变量之间以及其他类型的信息之间的比较,它返回一个代表运算结果的布尔值。当运算符对应的关系成立时,运算结果为true,否则为false。所有关系运算符通常用在条件语句中来作为判断的依据。
关系运算符就好像对俩个铁球进行比较,比较哪个更大,重量是否相等,并给出一个真或假的值。
C#中的关系运算符共有6个,如下表所示:

运算符 作用 结果
> 左比数是否大于右比较数 true/false
< 左比数是否小于右比较数 true/false
== 左比数是否等于右比较数 true/false
>= 左比数是否大于等于右比较数 true/false
<= 左比数是否小于等于于右比较数 true/false
!= 左比数是否不等于右比较数 true/false

2.4 逻辑运算符

返回类型为布尔值的表达式,如关系运算符可以被组合在一起构成一个更复杂的表达式,这是通过逻辑运算符类实现的。

运算符 含义 结果
&& 短路逻辑与(效率更高,第一个表达式结果如为false,则不去判断第二个表达式) true/false
& 非短路逻辑与(俩个表达式都会判断) true/false
|| 逻辑或 true/false
逻辑非 true/false

2.5 位运算符

位运算符除按位与、按位或外,其他只能用于处理整数操作数。位运算是完全针对位方面的操作。如果俩个操作数的精度不同,则结果的精度与精度高的操作数相同。

运算符 含义 计算方式
& 按位与 如果俩个整型数据a、b对应位都是1,则结果为1,否则为0
| 按位或 如果俩个整型数据a、b对应位都是0,则结果为0,否则为1
^ 按位异或 如果俩个整型数据a、b对应位都是0或者都是1,则结果为0,否则为1
<< 左移 移空补0
>> 右移 移空补最高位,最高位是1补1,最高位是0补0。(最高位是0则表正数,1为负数)

技巧
位移可以实现整数除以或乘以2n的效果。

y << 2 = y * 2^2^ ;
y >> 4 = y / 2^4^ ;

2.6 其它特殊运算符

2.6.1 is运算符

is运算符用于检查变量是否为指定的类型。返回值为布尔类型。

int a = 0 ;
bool result = a is int ; //判断a是否为指定类型

注意
不能重载is运算符。is运算符这能考虑引用转换、装箱转换和拆箱转换。

2.6.2 条件运算符

条件式?值1:值2

根据布尔型表达式的值,返回俩个值中的一个。如果条件为true,则返回第一个表达式,否则返回第二个表达式。

int a = 1,b =  2 ;
int c = a>b?a:b ;   //将a、b中大的值赋给c  

2.6.3 new运算符

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

  1. 对象创建表达式,用于创建一个类类型或值类型的实例。
  2. 数组创建表达式,用于创建一个数组类型的实例。
  3. 代表创建表达式,用于常见一个新的代表类型实例。

2.6.4 typeof运算符

typeof运算符用于获得系统原型对象的类型,也就是Type对象。Type类包含关于值类和引用类型的信息。typeof运算符可以再C#语言中的各个位置使用,以找出关于引用类型和值类型的信息。

using System;
namespace ConsoleApp1
{
    
    
    class Program
    {
    
    
        static void Main(string[] args)
        {
    
    
            Type mytype = typeof(int);
            Console.WriteLine("类型:{0}", mytype);  // 类型:System.Int32
            Console.ReadKey();类型:System.Int32
        }
    }
}

3 运算符优先级

C#中的表达式是使用运算符连接起来符合C#规范的式子,运算符的优先级决定了表达式中运算执行的先后顺序。
通常有衔接由高到底的书序依次是:
增量和减量运算>算数运算 > 关系预算 >逻辑运算> 赋值运算
如果俩个运算符有相同的优先级,那么左边的要比右边得先被处理。可以通过括号()来调整运算符的顺序,括号内的表达式会被优先执行。

猜你喜欢

转载自blog.csdn.net/qq_41525263/article/details/115362938