这一篇我们来讲解C#中的运算符

1. C#中的算术运算符 

  5个算数运算符:+  -  *  /  %   

   它们都是二元运算符,*  /  % 的运算优先级相同,并且高于 +  - ,+  - 的运算优先级也是相同的。我们可以通过小括号来改变计算的优先级,注意:小括号一定要成对出现。

  运算符两边的操作数的类型,要求一致,运算得到的结果也会与操作数的类型一致。

            int x = , y = ;
//得到的结果是 3
Console.WriteLine("num = {0}", x / y * 1.0);

     x / y * 1.0 这个表达式,先计算 x/y ,得到结果为3, 3再乘以1.0,结果是3.0,但输出的时候,不会输出3.0,而是3

            double vvv =  * 1.0;
//得到结果是 3
Console.WriteLine("vvv = {0}",vvv);

    int类型 乘以 double类型,结果是会被自动转换成double类型。

            int x = , y = ;
//得到的结果是 3.33333333333333
Console.WriteLine("num = {0}", x / (y * 1.0));

2. C#中的赋值运算符

  6个赋值运算符: =    +=    -=    *=    /=   %=

   它们在进行运算时,要求参与运算的操作数的类型必须相同,并且其运算结果也与操作数的类型相同。假如,参与运算的操作数的类型不一致时,会根据类型自动转换规则进行转换。

  这6个运算符的优先级都相同,在所有运算符中优先级是最低的。

3. C#中的逻辑运算符

  3个逻辑运算符: &&(且)    ||(或)    !(非)

  只有 ! 是一元运算符,其他的都是二元运算符

  优先级  ! >    &&   >  ||

  参与运算的必须是计算结果为bool类型的表达式,如 4 > 2

  (表达式) && (表达式)   只有当两个表达式全为true的时候,结果才为true

  (表达式)  || (表达式)   只有当两个表达式全为false的时候,结果才为false

  !(表达式)   进行取反操作,表达式为true的时候,结果为false;反之为true

  注意: &&   ||   会出现短路的情况

            int a = ;
int b = ;
//当逻辑与中前面一个表达式的结果为false,后面那个表达式就不参与运算了,造成短路
bool result = ++a > && ++b > ;
Console.WriteLine("a = {0} b = {1}",a,b);
//a = 11 b = 5 //当逻辑或中前面一个表达式的结果为true,后面那个表达式就不参与运算了,造成短路
bool res = ++a < || ++b < ;
Console.WriteLine("a = {0} b = {1}", a, b);
//a = 12 b = 5

4. C#中的关系运算符

  6个关系运算符: >   <  ==  !=   >=   <=

  它们的运算结果都是bool类型,参与运算的操作数的类型也必须相同。

5. C#中的自增、自减运算符

  包括这两种: ++    --       运算符在操作数前后的位置又可以分为前置和后置

  后置的优先级高于前置

  1. 后置

  当number++ 或 number-- 参与表达式运算时,由于运算符在number后面,所以在运算时,先用number的值参与表达式的运算,再将number的值+1 或 -1。

    int  res =  + number++;
我们可以理解成:
int res = + number;
number = number + ;

   于是我们得到结论:++  -- 后置的时候,先使用变量原有的值,再执行++ -- 的运算。

            int age = ;
int sum = (age++ + ) * - ;
//上面这句话相当于
//int sum = (age + 12) * 3 - 10;
//age++; Console.WriteLine("age = {0}", age); // age = 19
Console.WriteLine("sum = {0}", sum); // sum = 80

  2. 前置

    当++number 或 -- number参与表达式运算时,由于运算符在number前面,所以在运算时,先将number的值+1 或 -1,再用number的值参与表达式的运算 。

    int res =  + ++number;
我们可以理解成:
number = number + ;
int res = + number;

      例子:

            int var1, var2 = , var3 = ;

            var1 = var2++ * --var3;
//var1 = 25,var2 = 6,var3 = 5
Console.WriteLine("var1 = {0},var2 = {1},var3 = {2}", var1, var2, var3); var1 = ; var2 = ; var3 = ;
var1 = ++var2 * var3--;
//var1 = 36,var2 = 6,var3 = 5;
Console.WriteLine("var1 = {0},var2 = {1},var3 = {2}", var1, var2, var3);

6. C#中三元运算符

  语法:  条件 ? 结果1 : 结果2

    int a = ;
int c = ;
int b = (a>c) ? a : c;
// b 的值为3

  与 if - else语句等价

    int a = ;
int c = ;
int b;
if ( a > c )
{
b = a;
}
else
{
b = c;
}

7. C#中运算符表

  按照运算符的优先级进行排列

  这里列举一些常用的运算的优先级,下面按照从高到低的顺序排列了运算符的优先级。关于运算符的详细情况,请查阅 https://msdn.microsoft.com/zh-cn/library/ms173145.aspx

 

算术运算符中   *  /  %  的优先级高于 +  -

8. C#中运算符的结合性

  按方向来分,分为左结合和右结合

  左结合运算符按从左到右的顺序计算。 例如,x * y / z 将计算为 (x * y) / z。 右结合运算符按从右到左的顺序计算。 例如,赋值运算符是右关联的。

  赋值运算符和三元运算符 (?:) 是右结合运算符。 其他所有二元运算符都是左结合运算符。

   无论表达式中的运算符是左结合运算符还是右结合运算符,都将先从左至右评估各表达式的操作数。

9. C#中运算符重载

对于自定义类和结构,你可以更改运算符的行为。 此过程称为“运算符重载”。

.NET基础——运算符的更多相关文章

  1. [.net 面向对象编程基础] (6) 基础中的基础——运算符和表达式

    [.net 面向对象编程基础] (6) 基础中的基础——运算符和表达式 说起C#运算符和表达式,小伙伴们肯定以为很简单,其实要用好表达式,不是一件容易的事.一个好的表达式可以让你做事半功倍的效果,比如 ...

  2. js基础——运算符

    爱创课堂前端培训--js基础 运算符一.运算符 运算符(Operators,也翻译为操作符),是发起运算的最简单形式.分类:(运算符的分类仁者见智,本课程进行一下分类.)数学运算符(Arithmeti ...

  3. 基础运算符补充,流程控制之if判断/while循环

    常量 常量即指不变的量.在python中没有一个专门 的语法代表常量,程序员约定俗成地用变量名全部被大写代表常量. AGE_OF_OLDBOY = 56 基础运算符补充 1.算术运算 加减乘除+ - ...

  4. python常用命令和基础运算符

    基础运算符 http://www.cnblogs.com/alex3714/articles/5465198.html 身份运算符:is is not成员运算符:in not in ##in 判断元素 ...

  5. 分分钟钟学会Python -基础&运算符

    day002 基础&运算符 1.循环语句 ### 1.循环格式 while 条件: print('') ''' while True: print('人生苦短,我用Python.') ''' ...

  6. 10-12C#基础--运算符

    10-12C#基础--运算符 课前作业:班级内人数的姓名和年龄,分别写出之后并汇总. 一.运算符的分类 1.数学运算符(7个) 1)+(加号) 例: 2)-(减号) 例: 3)*(乘号) 例: 4)/ ...

  7. Python学习 之三 Python基础&运算符

    第三章:Python基础 & 运算符 3.1 内容回顾 & 补充 计算机基础 编码 字符串: "中国" "Hello" 字 符: 中 e 字 节 ...

  8. 小白学 Python(6):基础运算符(下)

    人生苦短,我选Python 前文传送门 小白学 Python(1):开篇 小白学 Python(2):基础数据类型(上) 小白学 Python(3):基础数据类型(下) 小白学 Python(4):变 ...

  9. Java编程基础——运算符和进制

    Java编程基础——运算符和进制 摘要:本文主要介绍运算符和进制的基本知识. 说明 分类 Java语言支持如下运算符: ◆ 算术运算符:++,--,+,-,*,/,%. ◆ 赋值运算符:=,+=,-= ...

  10. C++基础——运算符重载友元函数示例

    一.前言 其实本人学习C++的目的,只是为了体会OOP设计思想,并为利用System Verilog验证复杂设计做准备.如果想要真正做点软件方面项目级的东西,还需要掌握其他高级语言和库.框架等知识.因 ...

随机推荐

  1. [译]Java 设计模式之命令

    (文章翻译自Java Design Pattern: Command) 命令设计模式在进行执行和记录的时候需要一个操作及其参数和封装在一个对象里面.在下面的例子中,命令是一个操作,它的参数是一个Com ...

  2. jQuery无限级联下拉框插件

    自己编写jQuery插件 之 无限级联下拉框   因为是级联,所以数据必须是树型结构的,我这里的测试数据如下: 看下效果图: 1.>图一: 2.>图二: 3.>图三: 由图可知,下拉 ...

  3. MVC文件上传与下载

    MVC文件上传与下载 MVC文件上传与下载 想想自己从毕业到工作也有一年多,以前公司的任务的比较重,项目中有的时候需要用到什么东西都去搜索一下,基础知识感觉还没有以前在学校中的好.最近开始写博客,真的 ...

  4. jQuery Tags Input 插件显示选择记录

    利用jQuery Tags Input 插件显示选择记录 最近花了不少时间在重构和进一步提炼我的Web开发框架上,力求在用户体验和界面设计方面,和Winform开发框架保持一致,而在Web上,我主要采 ...

  5. SignalR 2.0 系列: SignalR简介

    SignalR 2.0 系列: SignalR简介 英文渣水平,大伙凑合着看吧,并不是逐字翻译的…… 这是微软官方SignalR 2.0教程Getting Started with ASP.NET S ...

  6. smartcn与IKanalyzer

    开源中文分词框架分词效果对比smartcn与IKanalyzer 项目背景: 某银行呼叫中心工单数据挖掘和分析项目,旨在利用文本计算实现热点聚焦和舆情分析. 一.引言: 中文分词一直是自然语言处理的一 ...

  7. KTHREAD 线程调度 SDT TEB SEH shellcode中DLL模块机制动态

    KTHREAD 线程调度 SDT TEB SEH shellcode中DLL模块机制动态获取 <寒江独钓>内核学习笔记(5)   继续我们的线程相关的数据结构的学习.接下来我们学习 KTH ...

  8. vj1010:高精乘+细心模拟

    这题的话思路挺简单的,主要是打一个高精乘,然后考虑一些细节的东西 码得挺少时间的,但是调错调了很久... 讲一下思路吧: 就是读入的时候,先把小数点去掉,mark一下小数点的位置 去掉小数点之后也就进 ...

  9. warfare(最大生成树裸题)

                                                                                                  战争 [问题 ...

  10. 随手复习一下委托:delegate

    先骂个街,天儿太闷了…… 随手复习一下委托,delegate 是一种函数指针,是 .net 提供的一种安全的函数指针,翻译的也很贴切,像是委托人,又像代理人,通过“委托”来执行一些函数而不是直接调用它 ...