C语言中为了方便运算,提供了一系列的操作符。操作符也叫运算符。
1.算数操作符
1,1“+”和“-”
- “+”和 “-”用来完成加法和减法。
- “+”和 “-” 都是有2个操作数的,位于操作符两端的就是它们的操作数,这种操作符也叫双目操作符。
1.2“*”
运用“*”来完成乘法。
1.3“/”
运用“/”来完成除法。
如果“/”的两端是整数,那么得到的结果也是正数,小数部分会被舍弃;
如果想要结果保留小数部分,那么“/”的两端必须至少有一个浮点数。
1.4“%”
“%” 表示求模运算,即返回两个整数相除的余值。这个运算符只能用于整数,不能用于浮点数。
负数求模的规则是:结果的正负号由第⼀个运算数的正负号决定。
2.赋值操作符
在变量创建的时候给⼀个初始值叫初始化,在变量创建好后,再给⼀个值,这叫赋值。
赋值操作符 “=”是⼀个随时可以给变量赋值的操作符。
2.1 连续赋值
赋值操作符也可以连续赋值,如:
不过这样写的代码不易解读,所以建议还是拆分来写,便于理解。
2.2 复合赋值符
在写代码的时候,我们经常可能对⼀个数进行自增、自减的操作,如:
这样的代码C语言提供了更简便的写法:
像“+=”这样的操作符称为复合赋值符,这些赋值符还有:
3.单目操作符
前面介绍的操作符都是双目操作符,有2个操作数的。C语言中还有⼀些操作符只有⼀个操作数,被称
为单目操作符。 ++、--、+(正)、-(负) 就是单目操作符的。
3.1“++”和“--”
++是⼀种自增的操作符,又分为前置++和后置++,--是⼀种自减的操作符,也分为前置--和后置--。
3.1.1 前置++
计算口诀:先加1,后使用。
原来是10,先+1,后a变成了11,再使用就是赋值给b,b得到的也是11,所以计算结束后,a和b都是11。
3.1.2 后置++
计算口诀:先使用,后加1。
a原来是10,先使用,就是先赋值给b,b得到了10,然后再+1,然后a变成了11,所以直接结束后a是11,b是10。
3.1.3 前置--
计算口诀:先减1,后使用。
3.1.4 后置--
计算口诀:先使用,后减1。
3.2“+”和“-”
这里的“+”是正号,“-”是负号,都是单目操作符。
运算符 “+” 对正负值没有影响,是⼀个完全可以省略的运算符,但是写了也不会报错。
运算符 - 用来改变⼀个值的正负号,负数的前面加上 “-” 就会得到正数,正数的前面加上 “-”会得到负数。
3.3 sizeof

#include <stdio.h>
int main()
{
int a = 10;
printf("%zd\n", sizeof(a));
printf("%zd\n", sizeof a);//a是变量的名字,可以省略掉sizeof后边的()
printf("%zd\n", sizeof(int));
printf("%zd\n", sizeof(3 + 3.5));
return 0;
}
运行结果如下:
sizeof中表达式不计算
//测试:sizeof中表达式不计算
#include <stdio.h>
int main()
{
short s = 2;
int b = 10;
printf("%d\n", sizeof(s = b+1));
printf("s = %d\n", s);
return 0;
}
运行结果为:
3.4强制类型转换
语法如下:
(类型)
示例如下:
为了消除这个警告,我们可以采用强制类型转换:
俗话说:强扭的瓜不甜我们使用强制类型转换都是万不得已的时候使用,如果不需要强制类型转化 就能实现代码,这样自然更好的。
4.逗号表达式
表现形式:exp1,exp2,exp3,...expN
规则:用逗号隔开的多个表达式,从左向右依次执行。整个表达式的结果是最后一个表达式的结果。
5.关系操作符
C语言中用于比较的表达式称为“关系表达式”,里面使用的运算符就称为关系运算符。主要有下面6个:
> : 大于运算符 a>b;
< : 小于运算符 a<b
>= : 大于等于运算符 a>=b
<= : 小于等于运算符 a<=b
== : 相等运算符 a==b
!= : 不相等运算符 a!=b
关系表达式通常返回0或1。
在C语言中,0表示假;非0表示真。比如20>12 返回的值为非0;20<12,返回的值为0。
关系表达式常用于if语句和循环语句。
如:
注意:
1.相等运算符“==”与赋值运算符“=”是两个不同的运算符,不能把它们弄混淆。如:
这个示例原意是x == 3,但是不小心写成x = 3了。这式子表示的是给x赋值3,它的返回值为3,所以总是表达为真。让代码陷入死循环。
为了避免这种错误,我们应该把变量写在等号的右边。
这样的话,如果把 == 输成 = 时,编译器会报错。
2.多个运算符不宜连用
上面示例中,连续使用两个小于运算符。这是合法表达式,不会报错,但是通常达不到想要的结果, 即不是保证变量 j 的值在 i 和 k 之间。因为关系运算符是从左到右计算,所以实际执行的是下面的表达式。
上面式子中, i < j 返回 0 或 1 ,所以最终是 0 或 1 与变量 k 进行比较。如果想要判断变量 j的值是否在 i 和 k 之间,应该使用下面的写法
6.条件操作符
条件操作符也叫作三目操作符,需要接受三个操作数,其形式如下:
条件操作符的运算逻辑是先判断exp1是否为真,如果为真,计算exp2;如果为假,计算exp3。计算的结果为整个式子的结果。
7.逻辑操作符
逻辑运算符提供逻辑判断功能,用于构建更复杂的表达式,主要有下面三个运算符:
!:逻辑取反操作符(改变单个表达式的真假)
&&:与操作符(两侧表达式都为真,则为真,否则为假)
|| :或运算符(两侧表达式至少有一个为真,则为真,否则为假)
7.1 !:逻辑取反操作符
表达形式为:
如果 flag 为真, !flag 就是假,如果 flag 为假, !flag 就是真
所以上面的代码的意思就是 flag 为假,执行if语句中的代码。
7.2 &&:与操作符
表达形式为:
这里表达的意思就是month既要大于等于3,又要小于等于5,必须同时满足。
7.3 ||:或运算符
表达形式为:
C语言逻辑运算符还有⼀个特点,它总是先对左侧的表达式求值,再对右边的表达式求值,这个顺序是保证的。
如果左边的表达式满足逻辑运算符的条件,就不再对右边的表达式求值。这种情况称为“短路”。
对于&&操作符来说,左边操作数的结果是0的时候,右边操作数就不再执行。
对于 || 操作符的左操作数的结果不为0时,就无需执行右操作数。
今天就整理总结这些操作符,剩下的操作符(移位操作符,位操作符,下标引用操作符,函数调用操作符...)后面会再次进行总结的。