体验C#——重温运算符【转】

来源:互联网 发布:ps如何做淘宝首页 编辑:程序博客网 时间:2024/06/06 15:03

C# 运算符

运算符是一种告诉编译器执行特定的数学或逻辑操作的符号。C# 有丰富的内置运算符,分类如下:

  • 算术运算符
  • 关系运算符
  • 逻辑运算符
  • 位运算符
  • 赋值运算符
  • 杂项运算符

本教程将逐一讲解算术运算符、关系运算符、逻辑运算符、位运算符、赋值运算符及其他运算符。

算术运算符

下表显示了 C# 支持的所有算术运算符。假设变量 A 的值为 10,变量 B 的值为 20,则:

运算符描述实例+把两个操作数相加A + B 将得到 30-从第一个操作数中减去第二个操作数A - B 将得到 -10*把两个操作数相乘A * B 将得到 200/分子除以分母B / A 将得到 2%取模运算符,整除后的余数B % A 将得到 0++自增运算符,整数值增加 1A++ 将得到 11--自减运算符,整数值减少 1A-- 将得到 9

实例

请看下面的实例,了解 C# 中所有可用的算术运算符:

using System;namespace OperatorsAppl{    class Program    {        static void Main(string[] args)        {            int a = 21;            int b = 10;            int c;            c = a + b;            Console.WriteLine("Line 1 - c 的值是 {0}", c);            c = a - b;            Console.WriteLine("Line 2 - c 的值是 {0}", c);            c = a * b;            Console.WriteLine("Line 3 - c 的值是 {0}", c);            c = a / b;            Console.WriteLine("Line 4 - c 的值是 {0}", c);            c = a % b;            Console.WriteLine("Line 5 - c 的值是 {0}", c);            c = a++;            Console.WriteLine("Line 6 - c 的值是 {0}", c);            c = a--;            Console.WriteLine("Line 7 - c 的值是 {0}", c);            Console.ReadLine();        }    }}

当上面的代码被编译和执行时,它会产生下列结果:

Line 1 - c 的值是 31Line 2 - c 的值是 11Line 3 - c 的值是 210Line 4 - c 的值是 2Line 5 - c 的值是 1Line 6 - c 的值是 21Line 7 - c 的值是 22

关系运算符

下表显示了 C# 支持的所有关系运算符。假设变量 A 的值为 10,变量 B 的值为 20,则:

运算符描述实例==检查两个操作数的值是否相等,如果相等则条件为真。(A == B) 不为真。!=检查两个操作数的值是否相等,如果不相等则条件为真。(A != B) 为真。>检查左操作数的值是否大于右操作数的值,如果是则条件为真。(A > B) 不为真。<检查左操作数的值是否小于右操作数的值,如果是则条件为真。(A < B) 为真。>=检查左操作数的值是否大于或等于右操作数的值,如果是则条件为真。(A >= B) 不为真。<=检查左操作数的值是否小于或等于右操作数的值,如果是则条件为真。(A <= B) 为真。

实例

请看下面的实例,了解 C# 中所有可用的关系运算符:

using System;class Program{  static void Main(string[] args)  {      int a = 21;      int b = 10;            if (a == b)      {          Console.WriteLine("Line 1 - a 等于 b");      }      else      {          Console.WriteLine("Line 1 - a 不等于 b");      }      if (a < b)      {          Console.WriteLine("Line 2 - a 小于 b");      }      else      {          Console.WriteLine("Line 2 - a 不小于 b");      }      if (a > b)      {          Console.WriteLine("Line 3 - a 大于 b");      }      else      {          Console.WriteLine("Line 3 - a 不大于 b");      }      /* 改变 a 和 b 的值 */      a = 5;      b = 20;      if (a <= b)      {         Console.WriteLine("Line 4 - a 小于或等于 b");      }      if (b >= a)      {         Console.WriteLine("Line 5 - b 大于或等于 a");      }  }}

当上面的代码被编译和执行时,它会产生下列结果:

Line 1 - a 不等于 bLine 2 - a 不小于 bLine 3 - a 大于 bLine 4 - a 小于或等于 bLine 5 - b 大于或等于 a

逻辑运算符

下表显示了 C# 支持的所有逻辑运算符。假设变量 A 为布尔值 true,变量 B 为布尔值 false,则:

运算符描述实例&&称为逻辑与运算符。如果两个操作数都非零,则条件为真。(A && B) 为假。||称为逻辑或运算符。如果两个操作数中有任意一个非零,则条件为真。(A || B) 为真。!称为逻辑非运算符。用来逆转操作数的逻辑状态。如果条件为真则逻辑非运算符将使其为假。!(A && B) 为真。

实例

请看下面的实例,了解 C# 中所有可用的逻辑运算符:

using System;namespace OperatorsAppl{    class Program    {        static void Main(string[] args)        {            bool a = true;            bool b = true;                       if (a && b)            {               Console.WriteLine("Line 1 - 条件为真");            }            if (a || b)            {                Console.WriteLine("Line 2 - 条件为真");            }            /* 改变 a 和 b 的值 */            a = false;            b = true;            if (a && b)            {                Console.WriteLine("Line 3 - 条件为真");            }            else            {                Console.WriteLine("Line 3 - 条件不为真");            }            if (!(a && b))            {                Console.WriteLine("Line 4 - 条件为真");            }            Console.ReadLine();        }    }}

当上面的代码被编译和执行时,它会产生下列结果:

Line 1 - 条件为真Line 2 - 条件为真Line 3 - 条件不为真Line 4 - 条件为真

位运算符

位运算符作用于位,并逐位执行操作。&、 | 和 ^ 的真值表如下所示:

pqp & qp | qp ^ q00000010111111010011

假设如果 A = 60,且 B = 13,现在以二进制格式表示,它们如下所示:

A = 0011 1100

B = 0000 1101

-----------------

A&B = 0000 1100

A|B = 0011 1101

A^B = 0011 0001

~A  = 1100 0011

下表列出了 C# 支持的位运算符。假设变量 A 的值为 60,变量 B 的值为 13,则:

运算符描述实例&如果同时存在于两个操作数中,二进制 AND 运算符复制一位到结果中。(A & B) 将得到 12,即为 0000 1100|如果存在于任一操作数中,二进制 OR 运算符复制一位到结果中。(A | B) 将得到 61,即为 0011 1101^如果存在于其中一个操作数中但不同时存在于两个操作数中,二进制异或运算符复制一位到结果中。(A ^ B) 将得到 49,即为 0011 0001~二进制补码运算符是一元运算符,具有"翻转"位效果。(~A ) 将得到 -61,即为 1100 0011,2 的补码形式,带符号的二进制数。<<二进制左移运算符。左操作数的值向左移动右操作数指定的位数。A << 2 将得到 240,即为 1111 0000>>二进制右移运算符。左操作数的值向右移动右操作数指定的位数。A >> 2 将得到 15,即为 0000 1111

实例

请看下面的实例,了解 C# 中所有可用的位运算符:

using System;namespace OperatorsAppl{    class Program    {        static void Main(string[] args)        {            int a = 60;           /* 60 = 0011 1100 */              int b = 13;           /* 13 = 0000 1101 */            int c = 0;                        c = a & b;           /* 12 = 0000 1100 */              Console.WriteLine("Line 1 - c 的值是 {0}", c );             c = a | b;           /* 61 = 0011 1101 */             Console.WriteLine("Line 2 - c 的值是 {0}", c);             c = a ^ b;           /* 49 = 0011 0001 */             Console.WriteLine("Line 3 - c 的值是 {0}", c);             c = ~a;               /*-61 = 1100 0011 */             Console.WriteLine("Line 4 - c 的值是 {0}", c);             c = a << 2;     /* 240 = 1111 0000 */             Console.WriteLine("Line 5 - c 的值是 {0}", c);             c = a >> 2;     /* 15 = 0000 1111 */             Console.WriteLine("Line 6 - c 的值是 {0}", c);            Console.ReadLine();        }    }}

当上面的代码被编译和执行时,它会产生下列结果:

Line 1 - c 的值是 12Line 2 - c 的值是 61Line 3 - c 的值是 49Line 4 - c 的值是 -61Line 5 - c 的值是 240Line 6 - c 的值是 15

赋值运算符

下表列出了 C# 支持的赋值运算符:

运算符描述实例=简单的赋值运算符,把右边操作数的值赋给左边操作数C = A + B 将把 A + B 的值赋给 C+=加且赋值运算符,把右边操作数加上左边操作数的结果赋值给左边操作数C += A 相当于 C = C + A-=减且赋值运算符,把左边操作数减去右边操作数的结果赋值给左边操作数C -= A 相当于 C = C - A*=乘且赋值运算符,把右边操作数乘以左边操作数的结果赋值给左边操作数C *= A 相当于 C = C * A/=除且赋值运算符,把左边操作数除以右边操作数的结果赋值给左边操作数C /= A 相当于 C = C / A%=求模且赋值运算符,求两个操作数的模赋值给左边操作数C %= A 相当于 C = C % A<<=左移且赋值运算符C <<= 2 等同于 C = C << 2>>=右移且赋值运算符C >>= 2 等同于 C = C >> 2&=按位与且赋值运算符C &= 2 等同于 C = C & 2^=按位异或且赋值运算符C ^= 2 等同于 C = C ^ 2|=按位或且赋值运算符C |= 2 等同于 C = C | 2

实例

请看下面的实例,了解 C# 中所有可用的赋值运算符:

using System;namespace OperatorsAppl{    class Program    {        static void Main(string[] args)        {            int a = 21;            int c;            c = a;            Console.WriteLine("Line 1 - =  c 的值 = {0}", c);            c += a;            Console.WriteLine("Line 2 - += c 的值 = {0}", c);            c -= a;            Console.WriteLine("Line 3 - -=  c 的值 = {0}", c);            c *= a;            Console.WriteLine("Line 4 - *=  c 的值 = {0}", c);            c /= a;            Console.WriteLine("Line 5 - /=  c 的值 = {0}", c);            c = 200;            c %= a;            Console.WriteLine("Line 6 - %=  c 的值 = {0}", c);            c <<= 2;            Console.WriteLine("Line 7 - <<=  c 的值 = {0}", c);            c >>= 2;            Console.WriteLine("Line 8 - >>=  c 的值 = {0}", c);            c &= 2;            Console.WriteLine("Line 9 - &=  c 的值 = {0}", c);            c ^= 2;            Console.WriteLine("Line 10 - ^=  c 的值 = {0}", c);            c |= 2;            Console.WriteLine("Line 11 - |=  c 的值 = {0}", c);            Console.ReadLine();        }    }}

当上面的代码被编译和执行时,它会产生下列结果:

Line 1 - =     c 的值 = 21Line 2 - +=    c 的值 = 42Line 3 - -=    c 的值 = 21Line 4 - *=    c 的值 = 441Line 5 - /=    c 的值 = 21Line 6 - %=    c 的值 = 11Line 7 - <<=    c 的值 = 44Line 8 - >>=    c 的值 = 11Line 9 - &=    c 的值 = 2Line 10 - ^=    c 的值 = 0Line 11 - |=    c 的值 = 2

杂项运算符

下表列出了 C# 支持的其他一些重要的运算符,包括 sizeoftypeof 和 ? :

运算符描述实例 sizeof()返回数据类型的大小。sizeof(int),将返回 4. typeof()返回 class 的类型。typeof(StreamReader); &返回变量的地址。&a; 将得到变量的实际地址。 *变量的指针。*a; 将指向一个变量。 ? :条件表达式 如果条件为真 ? 则为 X : 否则为 Y is判断对象是否为某一类型。If( Ford is Car) // 检查 Ford 是否是 Car 类的一个对象。 as强制转换,即使转换失败也不会抛出异常。Object obj = new StringReader("Hello");
StringReader r = obj as StringReader;

实例

using System;namespace OperatorsAppl{       class Program   {      static void Main(string[] args)      {                  /* sizeof 运算符的实例 */         Console.WriteLine("int 的大小是 {0}", sizeof(int));         Console.WriteLine("short 的大小是 {0}", sizeof(short));         Console.WriteLine("double 的大小是 {0}", sizeof(double));                  /* 三元运算符符的实例 */         int a, b;         a = 10;         b = (a == 1) ? 20 : 30;         Console.WriteLine("b 的值是 {0}", b);         b = (a == 10) ? 20 : 30;         Console.WriteLine("b 的值是 {0}", b);         Console.ReadLine();      }   }}

当上面的代码被编译和执行时,它会产生下列结果:

int 的大小是 4short 的大小是 2double 的大小是 8b 的值是 30b 的值是 20

C# 中的运算符优先级

运算符的优先级确定表达式中项的组合。这会影响到一个表达式如何计算。某些运算符比其他运算符有更高的优先级,例如,乘除运算符具有比加减运算符更高的优先级。

例如 x = 7 + 3 * 2,在这里,x 被赋值为 13,而不是 20,因为运算符 * 具有比 + 更高的优先级,所以首先计算乘法 3*2,然后再加上 7。

下表将按运算符优先级从高到低列出各个运算符,具有较高优先级的运算符出现在表格的上面,具有较低优先级的运算符出现在表格的下面。在表达式中,较高优先级的运算符会优先被计算。

类别 运算符 结合性 后缀 () [] -> . ++ - -  从左到右 一元 + - ! ~ ++ - - (type)* & sizeof 从右到左 乘除 * / % 从左到右 加减 + - 从左到右 移位 << >> 从左到右 关系 < <= > >= 从左到右 相等 == != 从左到右 位与 AND & 从左到右 位异或 XOR ^ 从左到右 位或 OR | 从左到右 逻辑与 AND && 从左到右 逻辑或 OR || 从左到右 条件 ?: 从右到左 赋值 = += -= *= /= %=>>= <<= &= ^= |= 从右到左 逗号 , 从左到右 

实例

using System;namespace OperatorsAppl{       class Program   {      static void Main(string[] args)      {         int a = 20;         int b = 10;         int c = 15;         int d = 5;         int e;         e = (a + b) * c / d;     // ( 30 * 15 ) / 5         Console.WriteLine("(a + b) * c / d 的值是 {0}", e);         e = ((a + b) * c) / d;   // (30 * 15 ) / 5         Console.WriteLine("((a + b) * c) / d 的值是 {0}", e);         e = (a + b) * (c / d);   // (30) * (15/5)         Console.WriteLine("(a + b) * (c / d) 的值是 {0}", e);         e = a + (b * c) / d;    //  20 + (150/5)         Console.WriteLine("a + (b * c) / d 的值是 {0}", e);         Console.ReadLine();      }   }}

当上面的代码被编译和执行时,它会产生下列结果:

(a + b) * c / d 的值是 90((a + b) * c) / d 的值是 90(a + b) * (c / d) 的值是 90a + (b * c) / d 的值是 50
0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 幼儿园小朋友很调皮怎么办 幼儿园小朋友上课调皮怎么办 孩子误冲游戏怎么办 遇到别的熊孩子怎么办 幼儿园遇到熊孩子怎么办 高铁上遇到熊孩子怎么办 幼儿爱打人家长怎么办 妈妈爱打孩子怎么办 35儿童爱打人怎么办? 一岁半宝宝太调皮怎么办 儿子高一不听话怎么办 小孩说了不听话怎么办 我的妈妈文盲怎么办 电脑键盘反拼音怎么办 小孩学习态度差怎么办 孩子不好好上学怎么办 小孩读书态度不好怎么办 幼儿园孩子不认识数字怎么办 一年级孩子拼音很差怎么办 孩子的拼音不好怎么办 小孩不会拼拼音怎么办 小孩拼音学不会怎么办 儿童l发音不准怎么办 小孩发音不标准怎么办 拼音l发音不准怎么办 孩子拼音声调分不清怎么办 小孩gk读成dt怎么办 拼音音调学不会怎么办 会拼音不会打字怎么办 大人拼音学不会怎么办 志愿服务经历少怎么办 医保报销发票丢失怎么办 费用发票丢失了怎么办 小孩乱拿东西怎么办 在家突然生了怎么办 二胎在家生的怎么办? 奶有一边没有怎么办 孩子应用题很弱怎么办 做不到不嫉妒怎么办 小孩自律太差怎么办 小学四年级数学差怎么办