1.除法与取模运算符
-7/4 = -1 -7./4 = -1.75 -7%4 = -3
7/4 = 1 7./4 = 1.75 7%4 = 3
C99要求除法运算符使用“趋零截尾”。这种“趋零截尾”的解释方式是建议将 -1.75 转换成 -1,而不是 -2。
取模运算符只用于整数运算,对浮点数是无效的。根据C99的整数除法规定“趋零截尾”规则,如果第一个操作数为负数,取模后得到的模也为负数;如果第一个操作数是整数,那么得到的模也为整数。 a%b = a - (a/b)*b
2.增量(++)减量(--)运算符
当 n++是表达示的一部分时,它表示的意思是“先使用n,然后将它的值增加1”;同样,++n 表示的意思是“先将n值增加1,然后再使用它”。
如果一个变量出现在同一个函数的多个参数中时,不要将增量或者减量运算符用于它上面。
当一个变量多次出现在一个表达示里时,不要将增量或减量运算符运用到它上面。
增量运算符只能用在变量名前,而不能用在常量前。
3.类型转换
(1)当出现在表达示中时,有符号和无符号的char和short类型都自动转换成int。在需要的情况下,将自动被转换为 unsigned int(如果 short 与 int有相同的大小,那么 unsigned short 比 int 大;在那种情况下,将把unsigned short 转换为 unsigned int)。
(2)在包含两种数据类型的任何运算里,两个值都被转换成两种类型里较高级别的。
(3)类型级别从高到低的顺序是 long double、double、float、unsigned long long、long long、unsigned long、long、unsigned int 和 int 。一个可能的例外是当 long 和 int 具有相同大小时,此时 unsigned int 比 long 的级别更高。
(4)在赋值语句里,计算的最后结果被转换成将要被赋予值的那个变量的类型。可能升级也可能降级。
(5)当作为函数的参数被传递时,char和short会被转换为int,float会被转换为double。
级别提升通常是一个平滑的无损害的过程,但是降级可能导致真正的问题。原因很简单:一个较低级别的类型可能不够大,不能存放一个完整的数。通常应该避免自动类型转换,尤其是避免降级。