基本运算符
基本运算符又叫基本算术运算符,包括 =、+、- 、*、/、%五种。C语言没有指数运算符,但是其标准函数库提供了指数运算函数,pow。
举例:
a = pow(3.8,6.6);返回值a为3.8的6.6次幂。
赋值运算符 “=”
在C语言中 “=” 不是相等的意思,而是赋值的意思,将某一个值赋予给另一个变量。
举例:
time = 2022;//把值2022赋给变量time
赋值行为是从右往左进行的。
再看:
2022 = time;
如何理解这个语句? 这在C语言中是没有意义的,也是无效的。 在该语句中,2022被称为右值,只能是字面常量,
C语言规定,不允许给常量赋值。
规则:
= 的左侧必须是一个变量,进一步来说,它必须引用一个存储位置。其中最简单的方法就是使用一个变量名。
赋值表达式的目的是把值存储到内存位置上,用于存储值得存储位置统称为数据对象。
加法运算符 +
加法运算符用于加法运算,使其两侧的值相加。
减法运算符 -
减法运算符用于减法运算,使左侧的数减去右侧的数。
符号运算符 + 和 -
加法和减法是二元运算符,符号运算符是一元运算符。
符号运算符表示一个数是正数还是负数。
可以对变量进行标记。
a = -100;
b = -a;
乘法运算符 *
乘法运算符用于乘法运算,C语言没有指数运算,在程序里有时候可以用乘法运算来间接实现指数运算。
除法运算符 /
除法运算符用于除法运算,左侧是被除数,右侧是除数。
除法分为整数除法和浮点数除法
在整数除法中,会出现无法整除的情况,如果实际结果有小数部分,整数除法会丢弃小数部分,这个过程被称为截断。也就是我们常说的的取整。
取整是直接丢弃小数部分,不会四舍五入!
举例:
5/4结果为1
6/3结果为2
7/4结果为1
7./4 结果为 1.75 浮点数除法
7./4. 结果为 1.75 浮点数除法
求模操作符 %
求模运算符用于整数运算,用于求出左侧整数除以右侧整数的余数。求模操作又叫取余。
注意:
求模运算只能用于整数,不能用于浮点数。
c99标准“趋零截断”:如果第一个运算对象是负数,那么求模的结果为负数;如果第一个运算对象是正数,那么求模的结果为正数。
举例:
11%2 结果为 1
11%-2结果为 1
-11%-5结果为 -1
-11%5结果为 -1
求模运算常用于程序的控制流!
举例:
假如每过10s,你就需要读取一次温度传感器的值,可以在程序中对时间求模,(time%10)
并检查结果是否为0。如果为0,则去读取一次温度传感器的值。
实际上,标准规定,求模可以通过公式求得a%b 可由 a-(a/b)*b求得。
算术运算符优先级
+、- (一元) R-L
*、/、% L-R
+、- (二元) L-R
= R-L
举例:
data = hl + cu*du/fb;
画图分析:
举例:
xa = 6*1 + 9*8;
当运算符共享一个运算对象时,优先级决定了求值顺序。
在上述表达式中,1是 * 和 +的运算对象,9也是类似的道理。根据运算符的优先级,先执行乘法运算,再执行加法运算。
但是这里有两个乘法运算,应该先执行哪个呢?
如果,根据 * 的结合律,从左往右,那应该先计算 6 * 1, 但是两个 * 法并不共享同一操作数。
如果,根据加法运算的结合律,从左往右,那应该先计算6*1,但是这又与优先级相矛盾。 因为要先计算乘法,此时加法还不起作用。
所以,这个是由编译器决定的,不同的编译器可能两个乘法计算的顺序是不同的。但是,不用担心,最后的结果是相同的。
举例:
-(2+5)*6 +(4+3*(2+3))
结果为-23。