算术运算符按操作数个数可分为一元运算符(含一个操作数)和二元运算符(含两个操作数)。一元运算符的优先级一般高于二元运算符。
一元运算符:+(正号)、-(负号)、++(自增1)、–(自减1)
二元运算符:+(加号)、-(减号)、*(乘号)、/(取商)、%(取余)
自增自减量运算符:++(增1)、–(减1)
两种适用形式:
一.++a 为前缀加形式的增 1 表达式,表示把变量 a 的值加 1 后的值作为该表达式的值,同时变量 a 本身的值加 1;–a 类似,表示把变量 a 的值减 1 后的值作为该表达式的值,同时变量 a 本身的值减 1。
二.a++为后缀加形式的增 1 表达式,表示先直接把变量 a 原来的值作为该表达式的值,然后变量 a 本身的值加 1; a-- 类似,表示先直接把变量 a 原来的值作为该表达式的值,然后变量 a 本身的值减 1
增1、减1运算符是具有副作用的运算符,即不仅能改变表达式的值,也改变了变量自身的值。使用时要慎重,尤其以下两种情况,要避免使用。
一、当一个变量多次出现在某表达式中时,建议不要将增 1 或减 1 运算符应用于该变量
二、多参函数调用时,如果一个变量出现在多个实参中时,不要对该变量使用增 1 或减 1 运算符。不同编译器可能得到不同结果,出现歧义性。
除法运算符(/):
当运算符 / 的操作数(被除数和除数)均为整数时,结果为取商(取整)。
取余运算符(%):
当运算符 % 的操作数(被除数和除数)均为整数时,结果为取余。
在程序设计中,经常使用求商和求余运算符分解整数的各位数字。例如,分解十进制整数 123 的个位、十位和百位数字,可以有多种不同的分解方案,下面是其中一种方案。
当一个表达式中出现多个运算符时,C语言会先比较各个运算符的优先级,按照优先级从高到低的顺序依次执行;当遇到优先级相同的运算符时,再根据结合性决定先执行哪个运算符:如果是左结合性就先执行左边的运算符,如果是右结合性就先执行右边的运算符。
类型转换(自动类型转换和强制类型转换):
自动类型转换(隐式转换):遵循一定的规则由编译系统自动完成。
将一种类型的数据赋值给另外一种类型的变量时就会发生自动类型转换
在不同类型的混合运算中,编译器也会自动地转换数据类型,将参与运算的所有数据先转换为同一种类型,然后再进行计算。转换的规则如下:
转换按数据长度增加的方向进行,以保证数值不失真,或者精度不降低。例如,int 和 long 参与运算时,先把 int 类型的数据转成 long 类型后再进行运算。
所有的浮点运算都是以双精度进行的,即使运算中只有 float 类型,也要先转换为 double 类型,才能进行运算。
char 和 short 参与运算时,必须先转换成 int 类型。强制类型转换:把表达式的运算结果强制转换成所需的数据类型。