目录
一、运算符分类
二、算术运算符及算术表达式
三、关系运算符与关系表达式
四、运算符优先级表
你知道5>4&&7<5-!0的最终值是多少吗?今天我们就来学习算术运算符与关系运算符,经过这篇的学习我相信你再回头看这道题目,你可以很快说出正确答案!
一、运算符分类
C语言提供了13种类型的运算符,如下所示:
1、算术运算符(+ - * / %) |
2、关系运算符(< > == >= <= !=) |
3、逻辑运算符(! || &&) |
4、位运算符(<< >> ~ | ^ &) |
5、赋值运算符(= 以及扩展赋值运算符) |
6、条件运算符(?:) |
7、逗号运算符(,) |
8、指针运算符(*和&) |
9、求字节数运算符(sizeof) |
10、强制类型转换运算符((类型)) |
11、分量运算符(. ->) |
12、下标运算符([ ]) |
13、其他(如调用函数运算符()) |
二、算术运算符及算术表达式
算术运算符包含+、—、*、/和%,当一个表达式中同时出现这5种运算符时,先进行乘(*)、除(/)、取余 (%),取余也称取模,后进行加 (+)、减(一),也就是乘、除、取余运算符的优先级高于加、减运算符。除%运算符外,其余几种运算符既适用于浮点型数又适用于整型数。当操作符/的两个操作数都是整型数时,它执行整除运算,在其他情况下执行浮点型数除法。%为取模运算符,它接收两个整型操作数,将左操作数除以右操作数,但它的返回值是余数而不是商。由算术运算符组成的式子称为算术表达式,表达式一定有一个值。
通过下面代码实例我们来掌握一下算术运算符
#include <stdio.h>int main() {int result = 3+6*3-30/5+10%3;printf("result = %d\n",result);return 0;
}
三、关系运算符与关系表达式
关系运算符>、<、==、>=、<仁、一依次为大于、小于、是否等于、大于等于、小于等于和不等于。由关系运算符组成的表达式称为关系表达式。关系表达式的值只有真和假,对应的值为1和0。由于C语言中没有布尔类型,所以在C语言中0值代表假,非0值即为真。例如,关系表达式3>4为假,因此整体值为0.而关系表达式 5-2 为真,因此整体值为1.关系运算符的优先级低于算术运算符,运算符的优先级的详细情況见本文最后。
在工作中,很多程序员容易不小心将两个等号写成一个等号、因此当判断整型变量i是否等于3时,我们可以写为3==i,即把常量写在前面而把变量写在后面。这是因为当不小心将两个等号写为一个等号时,变量在前面就会要致编译不通,从而快速发现错误(这种写法属于华为公司内部的一条编程规范)
同时,在编写程序时,如果我们需要判断三个数是否相等,那么绝对不可以写为if(5==5==5).这种写法的值无论何时都为假,为什么?因为首先5==5得到的结果为1,然后1==5得到的结果为0。如果要判断三个变量a、b、c是否相等,那么不能写为a==b==c,而应写为a==b &&b==C。下面来看一个例子。
【例】关系运算符的错误使用:
#include <stdio.h>
#include <stdlib.h>int main() {int a;while (scanf("%d",&a)){if(2<a<10){//不能用数学上的连续判断来判断某个数printf("a is between 2 and 10\n");}else{printf("a isn't between 2 and 10\n");}}return 0;
}
如果要判断变量a是否大于3且同时小于10,那么不能写为 3<a<10,这种写法在数学上的确是正确的,但是在程序中是错误的。首先,无论a是大于3 还是小于3,对于3<a这个表达式只有1或0两种结果。由于1和0都是小于10的,所以无论a的值为多少,这个表达式的值始终为真,因此在判断变量a是否大于3且同时小于10时,要写成a>3 && a<10,这才是正确的写法,不能用数学上的连续判断来判断某个数。
四、运算符优先级表
五、练习题
下一期:
【C语言】C语言期末突击/考研--选择、循环语句