5.1.1 运算符的种类

在C语言中,可以将运算符分为以下10大类。

(1)算术运算符:用于各类数值运算。包括加(+)、减(-)、乘(*)、除(/)、求余(%或称模运算)、自增(++)、自减(--)7种。

(2)关系运算符:用于比较运算。包括大于(>)、小于(<)、等于(==)、大于等于(>=)、小于等于(<=)和不等于(!=)6种。

(3)逻辑运算符:用于逻辑运算。包括与(&&)、或(|)、非(!)3种。

(4)位操作运算符:参与运算的量是按二进制位进行运算的。它包括位与(&)、位或(|)、位非(~)、位异或(^)、左移(<<)、右移(>>)6种。

(5)赋值运算符:用于赋值运算,它分为简单赋值(=),复合算术赋值(+=、-=、*=、/=、%=)和复合位运算赋值(&=、|=、^=、>>=、<<=)三类共11种。

(6)条件运算符:这是一个三目运算符,用于条件求值(?:)。

(7)逗号运算符:用于把若干表达式组合成一个表达式(,)。

(8)指针运算符:用于取内容(*)和取地址(&),它共有两种运算。

(9)求字节数运算符:用于计算数据类型所占的字节数(sizeof)。

(10)特殊运算符:有括号()、下标[]、成员(→,.)等几种。

例如下面的运算符都是合法的。

    a+b
    (a*2)/c
    (x+r)*8-(a+b)/7
    ++I
    sin(x)+sin(y)
    (++i)-(j++)+(k--)
    a+=5

1.强制类型转换运算符

强制类型转换运算符可以把表达式的运算结果强制转换成类型说明符所表示的类型。一般的使用格式如下。

    (类型说明符)  (表达式)

例如下面为强制转换代码。

    (float) a                      //功能是把a转换为单精度型
    (int)(x+y)                     //功能是把x+y的结果转换为整型

2.自增、自减运算符

C语言主要包括如下两种自增、自减运算符。

❑ 自增1运算符标记为“++”,其功能是使变量值自增1。

❑ 自减1运算符标记为“- -”,其功能是使变量值自减1。

自增1和自减1运算符均为单目运算,都具有向右的结合性,它们有以下4种常用形式。

(1)++i:i自增1后再参与运算。

(2)--i:i自减1后再参与运算。

(3)i++:i参与运算后,i的值再自增1。

(4)i--:i参与运算后,i的值再自减1。

在理解和使用上,容易出错的是i++和i--。特别是当它们出现在较复杂的表达式或语句中时,因此需要读者仔细分析。看下面的代码。

    int main(void) {
        int i=7;
        printf("%d\n", ++i);
        printf("%d\n", --i);
        printf("%d\n", i++);
        printf("%d\n", i--);
        printf("%d\n", -i++);
        printf("%d\n", -i--);
      }

在上述代码中,i的初值为7,在第2行i加1后输出为8;第3行减1后输出为7;第4行输出i等于7之后再加1(为8);第5行输出i等于8之后再减1(为7);第6行输出-7之后再加1(为-6),第7行输出-8之后再减1(为-9)。