@callofduty890
2022-11-29T06:14:55.000000Z
字数 9806
阅读 214
未分类
C#运算符是术语或符号,用于在表达式中对一个或多个操作数进行计算并返回结果,接受一个操作数的运算符被称之为一元运算符,如果改变运算符(+、-、/、*)可以称之为二元运算符,如果出现条件运算符?,这是C#当中唯一的三元运算符。
当表达式包含多个运算符时,运算符的优先级控制着各运算符的运算顺序。例如:x+y*z乘法的优先高于加号的运算符。
C#中以优先级为顺序的算术运算符等级如下(假设表中的num为整型变量,取值为8)
| 运算符 | 含义 | 说明 | 优先级 | 实例 | 结果 |
|---|---|---|---|---|---|
| ++ | 自增 | 操作数增加1 | 1 | ++num | 9 |
| -- | 自减 | 操作数减少1 | 1 | --num | 7 |
| * | 乘法 | 两个操作数的积 | 2 | num*3 | 24 |
| / | 除法 | 第二个操作数除第一个操作数 | 2 | 10.0/8 | 1.25 |
| % | 模数 | 第二个操作符除以第一个操作数后的余数 | 2 | 10%num | 2 |
| + | 加法 | 两个操作数相加 | 3 | num+1 | 9 |
| - | 减法 | 两个操作数相减 | 3 | num-1 | 7 |
注意事项:
(1)算术运算符两边的操作数应该都是数值型,若是字符型,则自动转换成字符对应的ASCII码再进行运算
例如:
char a = 'A';//转换成ASCII编码值int b = 10 + a;Console.WriteLine(b);
计算结果值:75
什么是ASCII码?
ASCII(American Standard Code for Information Interchange,美国信息互换标准代码)是一套基于拉丁字母的字符编码,共收录了 128 个字符,用一个字节就可以存储,它等同于国际标准 ISO/IEC 646。
ASCII 编码于 1967 年第一次发布,最后一次更新是在 1986 年,迄今为止共收录了 128 个字符,包含了基本的拉丁字母(英文字母)、阿拉伯数字(也就是 1234567890)、标点符号(,.!等)、特殊符号(@#$%^&等)以及一些具有控制功能的字符(往往不会显示出来)。

Char数据类型与int数据类型的互转
//int->charchar a = (char)97;Console.WriteLine(a);//char->intint A = 'A';Console.WriteLine(A);
(2)一元运算符(++)可以出现在操作数之前(++num)也可以出现在之后(num++)
前:++
int Number = 10;int result = ++Number;Console.WriteLine("result:{0} Number:{1}",result,Number);
运行结果:result:11 Number:11
后:++
int Number = 10;int result = Number++;Console.WriteLine("result:{0} Number:{1}",result,Number);
运行结果:result:10 Number:11
关系运算符是二元运算符。关系运算符用于将两个操作数的大小进行比较,若关系成立,则比较的结果为True,否则为False。关系运算符的操作数可以是数值类型、字符类型、枚举类型。
关系运算符如下表所示:
(假设表中的value为整型变量,取值为8)
| 运算符 | 含义 | 示例 | 结果 |
|---|---|---|---|
| == | 相等 | value==8 | True |
| != | 不等于 | value != 9 | True |
| > | 大于 | value>5 | True |
= |
大于或等于 | value>=8 | True |
| < | 小于 | value<8 | False |
| <= | 小于或等于 | value<=8 | True |
代码示例:
static void Main(string[] args){int a = 5, b = 6, c = 5;bool Switch1 = a == b;Console.WriteLine("a == b\t:{0}", Switch1);bool Switch2 = b != c;Console.WriteLine("b != c\t:{0}", Switch2);bool Switch3 = a>b;Console.WriteLine("a > b\t:{0}", Switch3);bool Switch4 = a >= b;Console.WriteLine("a >= b\t:{0}", Switch4);bool Switch5 = a < c;Console.WriteLine("a < b\t:{0}", Switch5);bool Switch6 = a <= c;Console.WriteLine("a <= b\t:{0}", Switch6);}
运行结果:
a == b :Falseb != c :Truea > b :Falsea >= b :Falsea < b :Falsea <= b :True
用于将操作数进行逻辑运算符,结果为True或False。
特殊点说明:逻辑运算符除逻辑非(!)是一元运算符,其余都是二元运算符
下表按优先级从高到低列表C#当中逻辑运算符
| 运算符 | 含义 | 说明 | 优先级 | 实例 | 结果 |
|---|---|---|---|---|---|
| ! | 逻辑非 | 当操作数为false的时候返回true,当操作数为true返回false | 1 | !true | false |
| & | 逻辑与 | 两个操作数均为true时,结果才为true否则为false | 2 | true&false | false |
| ^ | 逻辑异或 | 两个操作数不相同,即一个为true一个为false的时候,结果才为true否则为false | 3 | true^false | true |
| | | 逻辑或 | 两个操作数中有一个为true的时候,结果为true,否则为False | 4 | true|false | true |
| && | 条件与 | 两个操作数均为true时,结果才为true。但是仅在必要时才计算第二个操作数 | 5 | false&&true | false |
| || | 条件或 | 两个操作数中有一个为True,结果即为True,仅在必要的时候才计算第二个操作数 | 6 | false||true | true |
逻辑表达式-所有结果:
| 表达式-1 | 表达式-2 | 表达式-1 && 表达式-2 | 表达式-1 || 表达式-2 | !表达式-1 |
|---|---|---|---|---|
| False | False | False | False | False |
| True | True | True | True | False |
| True | False | False | True | False |
| False | True | False | True | True |
逻辑运算符-代码示例:
static void Main(string[] args){bool Switch1=false;bool Switch2=true;//逻辑运算符bool TEST_1 = !Switch1;Console.WriteLine("!Switch1\t:{0}", TEST_1);bool TEST_2 = Switch1&Switch2;Console.WriteLine("Switch1&Switch2\t:{0}", TEST_2);bool TEST_3 = Switch1^Switch2;Console.WriteLine("Switch1^Switch2\t:{0}", TEST_3);bool TEST_4 = Switch1|Switch2;Console.WriteLine("Switch1|Switch2\t:{0}", TEST_4);bool TEST_5 = Switch1&&Switch2;Console.WriteLine("Switch1&&Switch2:{0}", TEST_5);bool TEST_6 = Switch1 || Switch2;Console.WriteLine("Switch1||Switch2:{0}", TEST_6);}
运行结果:
!Switch1 :TrueSwitch1&Switch2 :FalseSwitch1^Switch2 :TrueSwitch1|Switch2 :TrueSwitch1&&Switch2:FalseSwitch1||Switch2:True
赋值运算符(=)将右操作数的值存储在左操作数表示的存储位置,操作数的类型必须相同(或者右边的操作数可以隐式转换为左边的操作数类型)。
1.赋值语句
语句形式如下所示:
变量名=表达式
其作用是计算右边表达式的值,然后将值赋给左边的变量
bool Switch=true;double mark=3.14;string Str="明天会更好";
2.复合赋值语句
复合运算符不仅可以简化程序的代码,使得程序更加精炼,而且可以提高程序的编译效率
复合运算符如表所示:
| 运算符 | 含义 | 举例 | 等效于 |
|---|---|---|---|
| += | 加法赋值 | sum+=item | sum=sum+item |
| -= | 减法赋值 | sum-=item | sum=sum-item |
| *= | 乘法赋值 | sum*=item | sum=sum*item |
| /= | 除法赋值 | sum/=item | sum=sum/item |
| %= | 取模赋值 | sum%=item | sum=sum%item |
位运算符用于按二进制进行逻辑运算,如下表所示
逐位运算:
| a | b | a&b(与) | a|b(或) | a^b(异或) |
|---|---|---|---|---|
| 0 | 0 | 0 | 0 | 0 |
| 0 | 1 | 0 | 1 | 1 |
| 1 | 1 | 1 | 1 | 0 |
| 1 | 0 | 0 | 1 | 1 |
假设:
A=60,二进制表示:0011 1100B=13,二进制表示:0000 1101
运算符不同的计算结果:
| 运算符 | 描述 | 实例 | 二进制-结果 | 十进制-结果 |
|---|---|---|---|---|
| & | 如果同时存在两个操作数,二进制And(与)运算符复制一位到结果当中 | A&B | 0000 1100 | 12 |
| | | 如果存在于任意操作数数,二进制Or(或)运算符复制一位到结果当中 | A|B | 0011 1101 | 61 |
| ^ | 二进制(异或)运算符复制一位到结果当中 | A^B | 0011 0001 | 49 |
| ~ | 按位取反运算符是一元运算符,具有翻转效果 | ~A | 1100 0011 | -61(补码) |
| << | 二进制左移运算符,左移动指定数目 | A<<2 | 1111 0000 | 240 |
| >> | 二进制右移运算符,右移动指定数目 | A>>2 | 0000 1111 | 15 |
1111 1100
表达式是可以计算的代码片段,其计算结果一般为单个值。对象以及类型成员。表达式由操作数、运算符和括号按照一定规则组成。表达式通过运算后产生运算结果,运算结果的类型由操作数和运算符共同决定。
例如:表达式a+3由两个操作数和一个运算符组成
表达式的书写规则:
分支结构:当你的程序存在两种可能性的时候,那么这种逻辑就是一种分支逻辑‘
流程示意:
语法格式
if(布尔值){//条件成立时进入}
代码示例:
Console.WriteLine("请输入您购买的号码:");int Value = Convert.ToInt32(Console.ReadLine());if (Value==10){Console.WriteLine("恭喜你,中奖了!奖金500万");}
说明;当条件Value成立的时候也就是value==10即为true这样if语句中的代码才会执行。
分支语句
如果IF里面的条件成立则执行,否则执行else的语句
语法格式
if(条件表达式){语句-1}else{语句-2}
该语句的作用是当条件表示的值为真的时候,执行if后的语句块-1,否则执行else后的语句
流程示意图

代码演示:
Console.WriteLine("请输入考试结果(合格/不合格):");string result=Console.ReadLine();if (result == "合格"){Console.WriteLine("恭喜考试通过!可以领取毕业证");}else{Console.WriteLine("尚未通过考试,请积极准备补考");}Console.ReadKey();
额外补充一点:IF的缩写
如果IF的花括号里面只有唯一的一句,那么我们可以选择不写花括号。
如下所示
Console.WriteLine("请输入考试结果(合格/不合格):");if (Console.ReadLine() == "合格")Console.WriteLine("恭喜考试通过!可以领取毕业证");elseConsole.WriteLine("尚未通过考试,请积极准备补考");Console.ReadKey();
IF当中也可以嵌套IF语句
Console.WriteLine("请输入考试结果(合格/不合格):");string result=Console.ReadLine();if (result == "合格"){Console.WriteLine("恭喜考试通过!可以领取毕业证");Console.Write("请输入考试分数(领取额外奖励):");int Number=Convert.ToInt32(Console.ReadLine());if (Number>90){Console.WriteLine("赠送笔记本电脑一台");}else{Console.WriteLine("赠送笔记本一本");}}else{Console.WriteLine("尚未通过考试,请积极准备补考");}Console.ReadKey();
所谓的选择结构是当你的逻辑存在两个或两个以上的可能性的时候,我们就会选择这种结构
if-else if语句
基本语法定义
if(条件1){语句-1;}else if(条件2){语句-2}else if(条件3){语句-3}else{语句-n}
代码流程图

以上的条件只要满足一个即可,其他的是不会判断执行的,每一个条件一般是一个区间范围,每一个条件是一个布尔类型的表达式/关系表达式/逻辑表达式
代码示例:
static void Main(string[] args){//请输入您的考试成Console.WriteLine("请输入您的考试成绩:");int Mark = Convert.ToInt32(Console.ReadLine());//判断成绩所在的区间范围if (Mark >= 90){Console.WriteLine("蒂花之秀");}else if (Mark >= 80){Console.WriteLine("造化钟神秀");}else if (Mark >= 70){Console.WriteLine("成绩中等,继续努力");}else if (Mark >= 60){Console.WriteLine("及格");}else{Console.WriteLine("不及格,请重修");}Console.ReadKey();}
switch-case语句
这个 一般也是存在两种或两种以上的可能性的时候会考虑,它跟if-else-if的区别是switch-case条件一般是一个具体的值而if-else-if条件一般是一个区间范围。
对于多分支如果使用if-else if结构其实也可以实现,但是语句层次会较多。结构会变得越来越复杂,代码的可读性会变得越来越差,此时可以利用Switch-case语句。Switch语句是一个控制语句,通过将控制传递给体内的一个case语句来处理多个选择或枚举
提示:按下两次tab键可以自动生成

语法格式:
switch(变量或表达式){case 值1:语句1;break;case 值2:语句2;break;...default:语句n:break;}
补充说明:
switch语句基于表达式的值选择要执行的语句分支。
【1】Switch语句按照以下顺序执行
1.表达式求值
2.如果case标签后常量表达式的值恰好等于表达式的值,控制将转到匹配case标签后的语句序列
3.如果case标签后的常量表达式都不等于表达式的值,且如果存在一个default(默认)标签,则将控制语句转到default标签后的语句序列
4.如果case标签后的常量表达式都不等于表达式的值,且如果不存在default(默认)标签,则将跳出Switch语句而执行后继语句
【2】表达式所允许的数据类型:整数类型、字符类型、字符串类型、枚举类型
【3】每一个case标签后常量的数据类型要与表达式类型一致,或可以隐式转换的关系。
【4】每一个case标签后常量表达式的值都不能相同,包括值相同的不同常量否则会导致编译错误无法通过
【5】一个Switch语句中最多只能有一个default标签,虽然Switch结构中case可以任意顺序放置,但是一般建议将default情况放到最后。
【6】case标签后的语句序列可以包含一条以上的执行语句,这些语句序列可以不加大括号,C#会自动顺序执行case标签后的所有执行语句。
【7】多个case可以共用一组语句语句序列
代码示例:
Console.WriteLine("请输入您的考试等级");switch (Console.ReadLine()){case "A":Console.WriteLine("A的成绩在90-100之间");break;case "B":Console.WriteLine("B的成绩在80-90之间");break;case "C":Console.WriteLine("C的成绩在70-80之间");break;case "D":Console.WriteLine("D的成绩在60-70之间");break;case "E":Console.WriteLine("E的成绩 小于60分");break;default:Console.WriteLine("请按要求输入,考试等级");break;}Console.ReadKey();
多个case可以共用一组语句语句序列
switch (Console.ReadLine()){case "A":case "B":case "C":case "D":Console.WriteLine("及格");break;case "E":Console.WriteLine("E的成绩 小于60分");break;default:Console.WriteLine("请按要求输入,考试等级");break;}
练习题: 请用户输入某一年的年份,判断输入出是闰年还是不是闰年
提示:判断某一年是否是润年的条件:该年份能被400整除的 或 该年份能被4整除的 同时 不能被100整除
三元表达式:
Console.WriteLine("请输入年份");int year = Convert.ToInt32(Console.ReadLine());bool isYear = (year % 400 == 0) || (year % 4 == 0 && year % 100 != 0);string result = isYear == true ? "闰年" : "不是闰年";Console.WriteLine(result);
我们可以进行进一步的简写:
Console.WriteLine("请输入年份");int year = Convert.ToInt32(Console.ReadLine());string result = (year % 400 == 0) || (year % 4 == 0 && year % 100 != 0) ? "闰年" : "不是闰年";Console.WriteLine(result);
IF:
Console.WriteLine("请输入年份");int year = Convert.ToInt32(Console.ReadLine());bool isYear = (year % 400 == 0) || (year % 4 == 0 && year % 100 != 0);if (isYear==true){Console.WriteLine("是闰年");}if (isYear==false){Console.WriteLine("不是闰年");}Console.ReadKey();
使用IF判断的简写
Console.WriteLine("请输入年份");int year = Convert.ToInt32(Console.ReadLine());bool isYear = (year % 400 == 0) || (year % 4 == 0 && year % 100 != 0);if (isYear == true)Console.WriteLine("是闰年");if (isYear == false)Console.WriteLine("不是闰年");Console.ReadKey();
IF-Else:
Console.WriteLine("请输入年份");int year = Convert.ToInt32(Console.ReadLine());bool isYear = (year % 400 == 0) || (year % 4 == 0 && year % 100 != 0);if (isYear){Console.WriteLine("是闰年");}else{Console.WriteLine("不是闰年");}Console.ReadKey();
IF-Else简写:
Console.WriteLine("请输入年份");int year = Convert.ToInt32(Console.ReadLine());if ((year % 400 == 0) || (year % 4 == 0 && year % 100 != 0))Console.WriteLine("是闰年");elseConsole.WriteLine("不是闰年");
IF-Else-IF:
//判断是否是闰年if (year % 400 == 0){Console.WriteLine("是闰年");}else if (year % 4 == 0 && year % 100 != 0){Console.WriteLine("是闰年");}else{Console.WriteLine("不是闰年");}
IF-Else-IF 简写:
//判断某一年是否是润年的条件:该年份能被400整除 或 该年份能被4整除的 同时 不能被100整除Console.WriteLine("请输入年份");int year = Convert.ToInt32(Console.ReadLine());//判断是否是闰年if (year % 400 == 0)Console.WriteLine("是闰年");else if (year % 4 == 0 && year % 100 != 0)Console.WriteLine("是闰年");elseConsole.WriteLine("不是闰年");Console.ReadKey();
使用IF的嵌套:
Console.WriteLine("请输入年份");int year = Convert.ToInt32(Console.ReadLine());if (year % 400 == 0){Console.WriteLine("是闰年");}else{//判断两种情况:如果能被4整除的情况下再判断是否能被100整除if (year % 4 == 0){if (year % 100 == 0){Console.WriteLine("不是闰年");}else{Console.WriteLine("是闰年");}}else{//不能被4整除,说明是不是闰年Console.WriteLine("不是闰年");}}
Switch语句
//输入年份与月份判断输出月份多少天Console.WriteLine("请输入年份");int year = Convert.ToInt32(Console.ReadLine());Console.WriteLine("请输入月份");int month = Convert.ToInt32(Console.ReadLine());int day = 0;switch (month){case 1:day = 31;break;case 2:// 闰年为 29 天,不间年为 28 天bool isYear = (year % 400 == 0) || (year % 4 == 0 && year % 100 != 0);if (isYear == true){day = 29;}else{day = 28;}break;case 3:day = 31;break;case 4:day = 30;break;case 5:day = 31;break;case 6:day = 30;break;case 7:day = 31;break;case 8:day = 31;break;case 9:day = 30;break;case 10:day = 31;break;case 11:day = 30;break;case 12:day = 31;break;default:Console.WriteLine("请输入1-12月份");break;}Console.WriteLine("{0}年{1}月->有{2}日",year,month,day);Console.ReadKey();