【C#学习笔记】【4】除了加减乘除,还有别的运算么(算数运算符与逻辑运算符)
本节的内容有点枯燥,但是很简单,记住就行,就像小学时我们刚学加减乘除混合运算那样。记住运算的优先性。(当然,如果你有C语言或其他基础,可以跳过,但是我不建议你跳过)
算数运算符
什么是算术运算符呢?当然就是做数学算数的啊,比如上节用到的加减乘除。下面介绍一些常用的运算符(+-*/我就不说了)。
取余数运算符%
%可以当作运算符用,其含义是取余数,也叫求模运算。例子如下:
int a=5; int b=3; int c=a%b; //即5被3整除求出余数,结果当然是2了 Console.WriteLine(c); //运行结果为2
偷懒运算符+=,-=,*=,/=,%=
这些运算符长得有点奇葩,但是含义很好理解,我先写个例子:
int a = 5; a += 2; Console.WriteLine(a); a -= 2; Console.WriteLine(a); a *= 2; Console.WriteLine(a); a /= 2; Console.WriteLine(a); a %= 2; Console.WriteLine(a);
如果我在这里告诉你,a+=2相当于是a=a+2的话,结果也就是7,那么其他的你能猜到么?
我想你猜到了,这也是我为什么称这类运算符为偷懒运算符的原因,他可以简化很多语句的写法。当然,你不知道这些运算符不会影响你做其他的,因为,他只是简写。
晕晕的运算符++,--
其实,++和--理解起来一点都不难,只是他们在某些情况下会令你十分晕。
先来说一下其含义吧,++相当于+=1,也就是自身增加1,--就是自减1喽。例如下面的程序:
int a=0; a++; //即a=a+1;也是a+=1; Console.WriteLine(a); //运行结果是1
上面的例子中,我把++写在了变量的后面。读到这里,是不是读出些画外音,难道++还可以写在前面?你说对了。见下面的例子:
int a=0; ++a; Console.WriteLine(a); //运行结果为1
看到这里,是不是感觉郁闷呢,两种写法并没有什么区别么,结果都相同。那我下面再写一个例子:
int a = 0; int b; int c = 0; int d; b = a++; d = ++c; Console.WriteLine(a); Console.WriteLine(b); Console.WriteLine(c); Console.WriteLine(d);
你运行上面的代码了么?如果没有,你可以先猜猜结果。结果如下
是不是和预想的结果不一样呢?我们运行的结果,a,b,c,d分别是1,0,1,1 。为什么会出现上面的情况?这就是我说的会让人晕的运算符。下面我详细解释一下。
如果++和--运算符在变量的前面,那么,变量会先进行自增自减,然后再参与整个的运算。如果出现在变量的后面,那么变量会先进行运算,在进行自增或者自减,结合上面的例子分析一下。
b=a++;这一句,由于自增运算符出现在了变量a的后面,所以,变量a先参与运算,也就是b=a这样的赋值运算,此时的a=0,然后a才自增1 。也就出现了结果中的a=1,b=0;
d=++c;这一句,自增运算符出现在了变量前面,所以,变量先进行了自增也就是c=1,然后又赋值给d,所以c和d都等于1 。
你还在晕么?自己输入代码试试。算数运算符我就介绍这么多。
逻辑运算符(关系运算符)
高中数学学过简单逻辑运算吧,在集合的那一部分。简易逻辑也就是与或非了。
先说个前文提到的,你还记得是什么吗?相等运算符==
==相等运算符
前面介绍过了,==会判断左边的是否等于右边,如果相等,结果是true,如果不等,结果是fale,示例如下。
bool b; b=3==2; Console.WriteLine(b); b=3==3; Console.WriteLine(b); //运行结果第一个为false,第二个为true
为什么用bool类型变量存放结果呢?思考一下,存放真假的变量类型是什么?
> ,< ,>=,<=,!=运算符
有人说,前两个我见过,大于和小于,那么后三个是什么呢?那就是大于等于,小于等于,不等于咯。因为我们在键盘上不容易输入≤,≥,≠这三个符号。至于示例程序,我就省略了,和上一个一样,换一下符号就OK了。
&&,||,!运算符
以上三个分别为逻辑且,逻辑或,逻辑非,他们是用来连接两个bool类型的值,并且给出最终运算值,其运算关系如下表:
运算符 |
左 |
右 |
结果 |
备注 |
&& |
true |
true |
true |
全真即真 |
false |
false |
false |
有假即假 |
|
false |
true |
false |
||
true |
false |
false |
||
|| |
false |
false |
false |
全假即假 |
true |
true |
true |
有真即真 |
|
false |
true |
true |
||
true |
false |
true |
||
! |
- |
true |
false |
真变假 |
- |
false |
true |
假变真 |
上面的表叫做真值表,下面举个简单的例子:
bool b; int x = 2; int y = 3; int z = 2; b = x > y && x >= z; Console.WriteLine(b); b = x > y || x >= z; Console.WriteLine(b); b = ! (x > y); Console.WriteLine(b);
猜一下运行结果,并且自己运行程序验证一下吧!
三元运算符 ?:
这个运算符长得很奇葩,又是问号又是冒号的,下面我先写个例子,再说说这个干什么的:
int a = 0; int b = 1; int max = a > b ? a : b; int min = a < b ? a : b; Console.WriteLine(max); Console.WriteLine(min); //运行结果,第一个1,第二个0
是不是看出些眉目,我分别找出了a和b中的最大值和最小值。那么这个三元运算符是干什么的呢?
问号前是一个逻辑表达式(就是带逻辑运算符的式子了),如果这个逻辑表达式的结果是true,那么程序会跳到?和:之间执行,如果问号前为false,那么直接跳到:后面执行。下面解释一下上面程序中取最大值的算法。
先是a>b一个逻辑判断,如果真,也就是a大于b了,那么,就执行?后面的a,也就是max=a,如果a>b是假的,那么最大值就是b,也就是:后面的,故max=b。
刚接触这个有点难以理解,我们只需要记住有这么个运算符就行了。在以后的例子中会再提到。
运算符的优先性(混合运算的优先法则)
在下表中列出的优先级从高到低(比如乘除的优先级高于加减)
运算符 | 说明 |
x++,x-- | 后自增自减 |
+x,-x,!x,++x,--x | 正号,负号,非,前自增,前自减 |
*,/,% | 乘法,除法,取余 |
+,- | 相加,相减 |
>,<,>=,<= | 大于,小于,大于等于,小于等于 |
==,!= | 相等,不相等 |
&&,||,?: | 逻辑且,逻辑或,三元运算符 |
= | 赋值运算符 |
+=,-=,*=,/=,%= | 复合赋值运算 |
如果出现同级的运算符,则按照从左到右的顺序计算。
当然,你可以用()来改变运算顺序,就像我们数学里的括号。需要注意的是,小括号外面还可以使用小括号,而不是中括号或者大括号。
在实际运用中,如果不记得运算顺序,我们可以添加括号,来保证我们的运算结果和我们的预想结果相同。
变量命名方式(上节的补充)
这部分本来应该在前文写,由于怕内容过多,写在了今天的内容里。
如果你学过C语言你可能有这样的体会,声明变量时,一会儿,a,一会儿又是b的,等一会儿回头看,a是啥玩意儿来着?所以给变量起个好的名字,有助于我们理解程序,也能统一代码风格。下面讲两种常见的命名方式。(如果你有更好的方法或者不采用一下方法,那我也没招)
Pascal命名方式(帕斯卡)
在这种方式中,我们将变量中的每个单词的首字母大写,如UserName(用户名),StudentNumber(学号),是不是很直观的就能知道变量的含义呢?当然,我们的变量不采用这种命名方式,这种方式用在以后学的类,接口,方法,属性中用。
Camel命名方式(骆驼)
这种方式和上一种的区别就是首单词的首字母小写,如userName,studentNumber。这种方式是我们给变量命名的常用方式。
合法的变量名称
不是任意字符都可以作为变量名称的。只能是字母或者下划线(_)开头,后面可以接任意的字母和数字还有下划线,至于长度,你自己一个变量名称写上几百个字母能记得住么?还有就是不要用关键字做变量名称,例如我们前面学的int,double这些,以后还会学到一些。要注意,C#会严格区分大小写,UserName和userName是两个变量。
总结
- 算数运算符指的是什么,有哪些常用的
- ++和--在变量前后的区别
- 什么是逻辑运算符,都有哪些
- 了解三元运算符,他是唯一的一个
- 运算符的优先性
- 补充的变量命名的问题