C使用运算符(operator)代表算数运算
一、赋值运算符(assignment operator):=
在C中,符号=并不表示“相等”,而是一个赋值运算符
year = 2022;
符号=左边是一个变量名,右边是赋给该变量的值
赋值运算符的动作顺序是从右到左
数据对象(data object):泛指数据存储区,例如用于保存变量或数组的数据存储区是一个数据对象
左值(lvalue):用于标识一个特定的数据对象的名字或表达式,例如变量的名字是一个左值
数据对象指的是实际的数据存储,左值是用于识别或定位该存储的标识符
可修改的左值:并不是所有的对象都是可更改值的
右值(rvalue):能赋给可修改的左值的量,右值可以是常量、变量或者任何可以产生一个值的表达式
操作数(operand):运算符操作的对象,例如=运算符的左操作数和右操作数
二、加法运算符(addition operator):+
功能:使其两侧的值相加
被加的值(操作数)可以是变量或常量
三、减法运算符(subtraction operator):-
功能:从其前面的数中减去其后面的数
+、-运算符被称为二元(binary)或双值(dyadic)运算符,需要两个操作数
四、符号运算符:- 和+
负号:-
正号:+
- 和+作为负号运算符时是一元运算符(unary operator),只需要一个操作数
五、乘法运算符:*
乘法的符号:*
C没有计算平方的函数,可以用乘法实现
示例代码:
/* test of multiplication */
#include <stdio.h>
int main(void)
{int length;printf("Enter a square side length. \n");scanf("%d", &length);printf("The square area is %d. \n", length * length);return 0;
}
运行结果:
六、除法运算符:/
功能:符号左边的值被其右边的值除
整型数的除法产生一个整数结果;浮点数的除法产生一个浮点数结果
截尾(truncation):整数除法结果的小数部分均被丢弃
示例程序:
/* test of division */
#include <stdio.h>
int main(void)
{printf("interger division: 9/2 is %d. \n", 9/2);printf("floating division: 9/2 is %f. \n", 9.0/2);return 0;
}
运行结果:
计算结果中,并没有把整数除法的结果四舍五入,而是进行了截尾,即舍弃小数部分
整数与浮点数进行混合运算时,计算结果是浮点数;实际上,计算机不能真正用整数去除浮点数,而是通过编译器将整数转换为浮点数
在C99标准中,负整数的除法使用“趋零截尾”原则,例如将-4.5转换为-4
示例代码:
/* test of division */
#include <stdio.h>
int main(void)
{printf("interger division: 9/2 is %d. \n", -9/2);printf("floating division: 9/2 is %f. \n", -9.0/2);return 0;
}
运行结果:
七、运算符的优先级
C通过建立一个运算符的优先顺序以满足在一个语句中进行多种运算的需要
高优先级的运算符先于低优先级的运算符执行
如果两个运算符有相同的优先级,根据其在语句里出现的顺序执行
运算符 | 结合性 |
() | 从左到右 |
+ -(一元运算符) | 从右到左 |
* / | 从左到右 |
+ -(二元运算符) | 从左到右 |
= | 从右到左 |