特此声明:本教程内容可能有部分参照其他博主的观点或描述,但始终不影响我学习的热情,代码全部自己手工敲打,编辑此教程目的不是为了博取大家眼球,也不是为利益所驱,只是纯属为了方便自己学习,编辑的过程中也让自己加深了对C#各个基础的印象,同时也让自己编码过程更加流畅顺利,最后还能帮助到有需要的人,代码都是自己亲测有效,如有侵权可以联系本人删除。

运算符其实就是一个符号,用来告诉编译器执行特定的数学或者逻辑运算。C#中内置了丰富的运算符,大致可以分为以下几类:

一、算术运算符

算术运算符即完成特定算术运算的符号,例如加、减、乘、除、余等,如下图所示:

无法为表空间 EAS_D_EAS1_TEMP2 中的段创建 INITIAL 区 无法为writeline赋值_优先级

int a = 10;
int b = 20;
Console.WriteLine("a+b={0}",a+b);
Console.WriteLine("a-b={0}",a-b);
Console.WriteLine("a*b={0}",a*b);
Console.WriteLine("a/b={0}",a/b);
Console.WriteLine("a%b={0}",a%b);
Console.WriteLine("++a的值是{0}",++a);
a = 30;
Console.WriteLine("a--的值是{0}",a--);
Console.WriteLine("a的值是{0}",a);

无法为表空间 EAS_D_EAS1_TEMP2 中的段创建 INITIAL 区 无法为writeline赋值_运算符_02

自增、自减运算,它们既可以放在前面也可以放在后面,区别就是:在变量的前面时表示先进行自增或者自减运算,例如(a=10,++a=11,a++=11)

int a = 10;
    int b = 20;
    Console.WriteLine("++a的值为{0}",++a);
    Console.WriteLine("a++的值为{0}",a++);
    Console.WriteLine("--b的值为{0}", --b) ;
    Console.WriteLine("b--的值为{0}",b--);
    Console.ReadKey();

二、关系运算符

关系运算符用来比较运算符左右两边的操作数,如图所示:

无法为表空间 EAS_D_EAS1_TEMP2 中的段创建 INITIAL 区 无法为writeline赋值_优先级_03

int a = 20;
 int b = 30;
 if(a==b)
 {
     Console.WriteLine("a等于b"); 
 }
 else
 {
     Console.WriteLine("a不等于b");
     if(a>b)
     {
         Console.WriteLine("a大于b");
     }
     else
     {
         Console.WriteLine("a小于b");
         if(a<b)
         {
             Console.WriteLine("a小于b");
         }
         else
         {
             Console.WriteLine("无法读取");
             Console.ReadKey();
         }
     }
 }
 Console.ReadKey();

无法为表空间 EAS_D_EAS1_TEMP2 中的段创建 INITIAL 区 无法为writeline赋值_算术运算符_04

三、逻辑运算符

假设变量A的布尔值是true,变量B的布尔值是false:

无法为表空间 EAS_D_EAS1_TEMP2 中的段创建 INITIAL 区 无法为writeline赋值_算术运算符_05

bool a = true;
bool b = false;
if(a&&b)//两真为真、一假为假
{
    Console.WriteLine("a&&b的条件值为真");
}
else
{
    Console.WriteLine("a&&b的条件为假");
}
if (a || b)//一真为真,两假为假
{
    Console.WriteLine("a||b的值为真");
}
else
{
    Console.WriteLine("a||b的值为假");
}
if (!(a &&b))//真假调换
{
    Console.WriteLine("!(a&&b)条件为真");
}
else
{
    Console.WriteLine("!(a&&b)条件为假");
}
if(!(a||b))
{
    Console.WriteLine("!(a||b)条件为真");
}
else
{
    Console.WriteLine("!(a||b)条件为假");
}
Console.ReadKey();

无法为表空间 EAS_D_EAS1_TEMP2 中的段创建 INITIAL 区 无法为writeline赋值_优先级_06

四、位运算符

在学习位运算符之前,先学会什么是二进制、八进制、十进制、十六进制,下面两张图介绍如何互相转换:

无法为表空间 EAS_D_EAS1_TEMP2 中的段创建 INITIAL 区 无法为writeline赋值_运算符_07

无法为表空间 EAS_D_EAS1_TEMP2 中的段创建 INITIAL 区 无法为writeline赋值_优先级_08

无法为表空间 EAS_D_EAS1_TEMP2 中的段创建 INITIAL 区 无法为writeline赋值_算术运算符_09

代码如下:

int a = 60;            /* 60 = 0011 1100 */
 int b = 13;            /* 13 = 0000 1101 */
 int c = 0;
 c = a & b;           /* 12 = 0000 1100 */
 Console.WriteLine("a & b 的值是 {0}", c);
 c = a | b;           /* 61 = 0011 1101 */
 Console.WriteLine("a | b 的值是 {0}", c);
 c = a ^ b;           /* 49 = 0011 0001 */
 Console.WriteLine("a ^ b 的值是 {0}", c);
 c = ~a;               /*-61 = 1100 0011 */
 Console.WriteLine("~a 的值是 {0}", c);
 c = a << 2;     /* 240 = 1111 0000 */
 Console.WriteLine("a << 2 的值是 {0}", c);
 c = a >> 2;     /* 15 = 0000 1111 */
 Console.WriteLine("a >> 2 的值是 {0}", c);
 Console.ReadLine();

运行结果如下:

无法为表空间 EAS_D_EAS1_TEMP2 中的段创建 INITIAL 区 无法为writeline赋值_运算符_10

五、赋值运算符

赋值运算符顾名思义就是用来为变量赋值的,如图所示有这些复制运算符:

无法为表空间 EAS_D_EAS1_TEMP2 中的段创建 INITIAL 区 无法为writeline赋值_优先级_11

执行代码案例如下:

int a = 33;
int c;
c = a;
Console.WriteLine("c=a的值为:{0}",c);
c += a;
Console.WriteLine("c+=a的值为:{0}",c);
c -= a;
Console.WriteLine("c-=a的值为:{0}",c);
c *= a;
Console.WriteLine("c*=a的值为:{0}",c);
c /= a;
Console.WriteLine("c/=a的值为:{0}",c);
c = 123;
c %= a;
Console.WriteLine("c%=a的值为:{0}",c);
c <<= 2;
Console.WriteLine("c<<=2的值为:{0}",c);
c >>= 2;
Console.WriteLine("c>>=2的值为:{0}",c);
c &= 2;
Console.WriteLine("c&=2的值为:{0}",c);
c ^= 2;
Console.WriteLine("c^=2的值为:{0}",c);
c |= 2;
Console.WriteLine("c|=2的值为:{0}",c);

运行结果如下:

无法为表空间 EAS_D_EAS1_TEMP2 中的段创建 INITIAL 区 无法为writeline赋值_运算符_12

六、其他运算符

除上面介绍的运算符之外,C#中还支持一些其他重要的运算符,如下表所示:

无法为表空间 EAS_D_EAS1_TEMP2 中的段创建 INITIAL 区 无法为writeline赋值_运算符_13

代码示例如下:

//sizeof运算符实例
Console.WriteLine("int大小是:{0}",sizeof(int));
Console.WriteLine("short的大小是:{0}",sizeof(short));
Console.WriteLine("double的大小是:{0}",sizeof(double));

//typeof()类型
Console.WriteLine("int的类型是:{0}", typeof(int)) ;
Console.WriteLine("string的类型是:{0}",typeof(string));
Console.WriteLine("float的类型是:{0}",typeof(float));

//&返回变量地址

/*三元运算符的实力*/
int a, b;
a = 11;
b = 20;
b=(a==1)? 20 : 30;
Console.WriteLine("b的值是:{0}",b);

b = (a == 11) ? 20:30;
Console.WriteLine("b的值为:{0}",b);

Console.ReadKey();

 

运行结果如下:

无法为表空间 EAS_D_EAS1_TEMP2 中的段创建 INITIAL 区 无法为writeline赋值_算术运算符_14

三元运算符“?:”,语法为:条件表达式?表达式1:表达式2;
该操作首先求出条件表达式的值(bool类型),为true时调用表达式1,为flase时调用表达式2。其逻辑为:“如果为真执行第一个,否则执行第二个。”

七、运算符的优先级

前面我们介绍了运算符的类型,当这些不同类型的运算符出现在同一个表达式的时候,就必须要遵循运算符的优先级来进行计算,才能保证运算的合理性和结果的正确性、唯一性。运算符的优先级决定了表达式中各个部分执行运算的先后顺序,例如数学中的“先算乘除、后算加减,括号除外”,程序中也是如此,也会有个有限顺序,其实这点可以了解下就行,不会可以翻字典:

无法为表空间 EAS_D_EAS1_TEMP2 中的段创建 INITIAL 区 无法为writeline赋值_算术运算符_15