C语言从0到1(04)——运算符(01)
一、为什么要有运算符
在现实生活中有许多的运算,如:
计算利息会用到加减乘除;跟人比较身高,年龄会用到大于、小于、等于。
程序解决生活中的难题更是离不开运算。
二、什么是运算符
运算符是一种告诉编译器执行特定的数学或逻辑操作的符号。
C 语言内置了丰富的运算符,并提供了以下类型的运算符:
- 算术运算符:+(加)、-(减)、*(乘)、/(除)、%(取模)、++(自增)、–(自减)
- 关系运算符:>(大于)、<(小于)、>=(大于等于)、<=(小于等于)、==(相等)、!=(不相等)。
- 赋值运算符:=(赋值)。
- 逻辑运算符:&&(逻辑与)、||(逻辑或)、!(取反)
- 位运算符:&(与)、|(或)、^(异或)、>>、<<(位移)
三、算术运算符
- +、-、* :连接两个操作数,把两个操作数进行对应的运算。
int a = 10;
int b = 20;
printf("%d+%d = %d\n", a, b, a+b);//+
printf("%d-%d = %d\n", a, b, a-b);//-
printf("%d*%d = %d\n", a, b, a*b);//*
输出结果:(结果同预期,证明小学已毕业)
10+20 = 30
10-20 = -10
10*20 = 200
- / :连接两个操作数,把两个操作数进行除法的运算。
int a = 3;
int b = 10;
int c = 5;
printf("%d/%d = %d\n", b, c, b/c);
printf("%d/%d = %d\n", a, b, a/b);
printf("%d/%d = %d\n", b, a, b/a);
大家可以先想想输出结果,是否同你预期呢?
10/5 = 2
3/10 = 0
10/3 = 3
当有些事情与你原本根深蒂固的认知不同时,不要立判对错,有些事情没有对错,只是因素不同。
注意:两个整型运算,得到结果也为整型(会省略小数部分),因为浮点型数据与整型数据存储方式不同。
- 如下对比:
int a = 3;
float b = 10;
int c = 5;
printf("%f/%d = %f\n", b, c, b/c);
printf("%d/%f = %f\n", a, b, a/b);
printf("%f/%d = %f\n", b, a, b/a);
输出结果:
10.000000/5 = 2.000000
3/10.000000 = 0.300000
10.000000/3 = 3.333333
整型与浮点型运算,结果得到浮点型。两个操作数进行运算,结果会自动转换成“较大”类型。
- % :连接两个操作数,相除后取余数。
int a = 10;
int b = 3;
int c = 2;
printf("%d %% %d = %d\n", a, b, a%b);//注意 % 号的打印方式
printf("%d %% %d = %d\n", a, c, a%c);
输出结果:
10 % 3 = 1
10 % 2 = 0
注意:% 两个操作数均不能是浮点型。
- 后缀 ++(自增)、–(自减):置于变量之后,使变量自增或自减1。
int a = 10;
int b = 10;
a++;
b--;
printf("%d, %d\n", a, b);
输出结果:
11,9
再来看个后缀自增自减的特殊之处:
int a = 10;
int b = 10;
printf("%d, %d\n", a++, b--);
printf("%d, %d\n", a, b);
输出结果:
10,10
11,9
WTF?
注意:后缀自增和自减运算是在语句结束后才会执行。
也就是在第一句打印时,a和b均未执行自增和自减;等第一句打印执行完后,才会执行自增自减;所以第二句打印的值是自增和自减之后的值。
- 前缀++、–:置于一个变量之前,使其自增或自减1。
int a = 10;
int b = 10;
++a;
--b;
printf("%d, %d\n", a, b);
输出结果:
11,9
上述结果与后缀一至,再来看下述代码:
int a = 10;
int b = 10;
printf("%d, %d\n", ++a, --b);
printf("%d, %d\n", a, b);
输出结果:
11,9
11,9
前缀++、–,会使变量里面自增或自减1,而不是等到语句结束后再执行。
总结:算术运算符,在实际编程中使用频率很高,但是一般的应用开发中不会涉及很复杂的组合,相对来说都很简单。只要特别注意除、取模、后缀自增自减的特殊之处。
各位童鞋也可以自己多试试各运算符的组合使用,下一节将讲解“其他运算符”。