前言
在之前的文章中,我们介绍了各种数学运算该怎么进行,而在数学中我们也常常会遇到比较大小的情况,比如期末考试考到80分以上就可以吃肯德基,那么今天我们就来探讨一下,计算机中如何比较两个数值的大小。
1 比较运算符
比较运算符也叫关系运算符,用于比较两个值的大小,并返回一个布尔值,表示是否满足某一个条件,在生活中我们常常有类似的数值比较,比如考试考到80分以上就可以去吃肯德基,那么我们就需要用考试成绩和80分作比较,来判断是否可以吃肯德基。
下面我列举了C#中所有的比较运算符,其中例子中的A = 5, B = 10。
运算符 |
描述 |
例子 |
== |
检查左右两侧操作数是否相等,相等为true,不等为false |
A == B 返回结果为false |
!= |
检查左右两侧操作数是否不等,相等为false,不等为true |
A != B 返回结果为true |
> |
检查左侧操作数是否大于右侧操作数,大于为true,小于为false,相等为false |
A > B 返回结果为false |
< |
检查左侧操作数是否小于右侧操作数,大于为false,小于为true,相等为false |
A < B 返回结果为true |
>= |
检查左侧操作数是否大于等于右侧操作数,大于为true,小于为false,相等为true |
A >= B 返回结果为false |
<= |
检查左侧操作数是否小于等于右侧操作数,大于为false,小于为true,相等为true |
A <= B 返回结果为true |
注意:之前的文章中提到过,浮点数类型float和double两种数据类型是不准确的,因此这两种数据类型一般不会被放在 == 左右进行比较,一般只会进行大于或小于比较。
1.1 不同数据类型之间比较
不同的数据类型也可以同时放在比较运算符左右进行比较,如:
int value1 = 10;
float value2 = 10.5f;
Console.WriteLine(value1 < value2);//输出结果为true
1.2 使用比较运算符比较字符类型
比较运算符也不仅仅可以用来比较数字,在C#中,字符类型也可以作为比较运算符左右的操作数,但和之前的算术运算符一样,字符类型在做比较时比较的也是它的编码表中对应的编码,而不是字符本身,如大写字母‘A’的十进制ASCII码为65,小写字母‘a’的十进制ASCII码为97,那么有如下代码:
char charValue1 = 'A';
char charValue2 = 'B';
Console.WriteLine(charValue1 > charValue2);//输出结果为false
同时,字符类型也可以和数值类型进行比较。
int intValue = 65;
char charValue = 'A';
Console.WriteLine(intValue == charValue);//输出结果为True
1.3 其它数据类型比较
在上文中我们展示了数值类型和字符类型在运用于比较运算符时的效果,那么到目前为止我们提到过的数据类型中,还有布尔类型和字符串类型没有被提及,那么比较运算符可以应用于这两种数据类型么?
Console.WriteLine("a" >= "bc");//报错
Console.WriteLine("a" == "a");//输出结果为True
Console.WriteLine(true != false);//输出结果为False
Console.WriteLine(true < false);//报错
在C#中,比较运算符可以应用于字符串类型和布尔类型之间,但只有“==、!=”两个运算符可用,无法判断大小。
2 逻辑运算符
逻辑运算符只能使用在不两个布尔类型之间,当一个判断需要有多个条件时使用。
逻辑运算符主要有三个,分别为:
- 逻辑与(&&):左右两个条件都为true时返回true,有一个false就返回false;
- 逻辑或(||):左右两个条件有一个为true时就返回true,两个都是false时返回false
- 逻辑非(!):取反运算
或者我们换一个例子来形容,比如找工作时,招聘启事中常见的两个条件,一个是要求有三年工作经验,另一个是要求本科以上学历。
那么什么是逻辑与呢,就是要求既要有三年工作经验,又要是本科以上学历,有一个条件没达成,就算不满足条件。
什么是逻辑或呢,就是这个公司要求比较低,有三年工作经验或者本科以上学历就行,两个条件只要达成一个就满足条件,要都不满足就不行了。
而逻辑非比较特殊,他只有一个操作数,作用是将true变为false,把false变为true。
Console.WriteLine(!true);//输出结果为false
Console.WriteLine(!false);//输出结果为true
在C#中,由于其他数据类型不能转换为布尔类型,所以逻辑运算符只能应用于布尔类型之间,不能应用于其它任何类型。
短路规则
短路规则是程序在执行时,为了降低运算次数而产生的一个规则, 规则如下:
- 在逻辑与运算中,如果第一个条件为false则不再判断第二个条件
- 在逻辑或运算中,如果第一个条件为true则不再判断第二个条件
其实这两个规则也很好理解,还是刚才找工作的例子,在第一家比较严格的公司,当我发现你没有三年以上工作经验时,你是不是本科毕业的对我就没有什么意义了,因为你已经不再满足条件了。
那么对于第二家公司来说,如果你有三年以上工作经验,我就不需要再考虑你是否是本科毕业的了,因为两个条件有一个满足,你就已经满足了条件了。
这个规则在遇到逻辑运算中出现运算时需要格外注意,如:
int num = 1;
Console.WriteLine(1 > 2 && num++ == 2);//输出结果为false
Console.WriteLine(num);//输出结果为1
Console.WriteLine(1 < 2 || num++ < 2);//输出结果为true
Console.WriteLine(num);//输出结果为1
在上面的代码中,如果正常进行,因为num++这个自增操作,在第一次输出false后num值应该变为2,但实际上并没有发生改变,就是因为短路规则,使得第二个语句并没有被执行,因此num值没变,下面的代码也是同理。
总结
以上就是今天要介绍的内容,今天的主要内容为介绍所有的比较运算符和逻辑运算符,这两种运算符会在后续程序中大量的使用,在程序中会有非常多的执行条件,就比如最开始说的80分以上才能吃肯德基,在程序中也会有很多类似于这样的条件,只有当满足一定条件才能执行特定的代码,当然这里也需要后续学习的分支语句来配合使用。