C++入门很轻松(微课超值版)
上QQ阅读APP看书,第一时间看更新

4.1 认识运算符

微视频

运算符是一种告知编译器执行特定的数学或逻辑操作的符号。C++语言内置了丰富的运算符,主要包括算术运算符、关系运算符、逻辑运算符、赋值运算符、位运算符等。

4.1.1 算术运算符

C++语言中的算术运算符是用来处理四则运算的符号,也是最简单、最常用的符号,尤其是数字的处理几乎都会用到运算符。如表4-1所示,列出了C++语言中常用的算术运算符(这里假设变量A的值为10,变量B的值为20)。

表4-1 算术运算符

【实例4.1】计算数值21与10的和、差、积、商、余数等(源代码\ch04\4.1.txt)。

    #include <iostream>
    using namespace std;
    int main()
    {
       int a = 21;
       int b = 10;
       int c ;
       c = a + b;
       cout << "第1行a+b:c的值是"<<c<<endl;
       c = a - b;
       cout << "第2行a-b:c的值是"<<c<<endl;
       c = a * b;
       cout << "第3行a*b:c的值是"<<c<<endl;
       c = a / b;
       cout << "第4行a/b:c的值是"<<c<<endl;
       c = a % b;
       cout << "第5行a%b:c的值是"<<c<<endl;
       c = a++;    //赋值后再加1,c为21,a为22
       cout << "第6行a++:c的值是"<<c<<endl;
       c = a--;    //赋值后再减1,c为22,a为21
       cout << "第7行a--:c的值是"<<c<<endl;
    }

程序运行结果如图4-1所示。

图4-1 例4.1的程序运行结果

4.1.2 自增、自减运算符

在C++中,提供了两个比较特殊的运算符:自增运算符++和自减运算符--。自增、自减运算符又分为前缀和后缀。当++或--运算符置于变量的左边时,称为前置运算或称为前缀,表示先进行自增或自减运算,再使用变量的值。而当++或--运算符置于变量的右边时,称为后置运算或后缀,表示先使用变量的值,再进行自增或自减运算。前置与后置运算方法如表4-2所示(这里假设参与计算的变量为a和b,并且a的值为5)。

表4-2 自增、自减运算符的前置与后置

【实例4.2】编写程序,定义int型变量x和y,分别对x做前置运算和后置运算,将运算结果赋予y,然后分别输出x和y的值(源代码\ch04\4.2.txt)。

    #include <iostream>
    using namespace std;
    int main()
    {
              int x,y;
              /* 后置运算 */
              cout << " x++、x--均先赋值后运算:"<<endl;
              x = 5;
              y = x++;
              cout <<"y="<<y <<endl;
              cout <<"x="<<x <<endl;
              x = 5;
              y = x--;
              cout <<"y="<<y <<endl;
              cout <<"x="<<x <<endl;
              /* 前置运算 */
              cout <<"++x、--x均先运算后赋值:" <<endl;
              x = 5;
              y = ++x;
              cout <<"y="<<y <<endl;
              cout <<"x="<<x <<endl;
              x = 5;
              y = --x;
              cout <<"y="<<y <<endl;
              cout <<"x="<<x <<endl;
    }

程序运行结果如图4-2所示。在本实例中,y=x++表示先将x值赋予y,再对x进行自增运算;y=++x表示先将x进行自增运算,再将x值赋予y;y=x--表示先将x值赋予y,再对x进行自减运算;y=--x表示先将x进行自减运算,再将x值赋予y。

图4-2 例4.2的程序运行结果

4.1.3 关系运算符

关系运算可以被理解为一种“判断”,判断的结果要么是“真”,要么是“假”。C++语言中规定关系运算符的优先级低于算术运算符,且高于赋值运算符。C++语言中定义的关系运算符如表4-3所示(这里假设变量A的值为10,变量B的值为20)。

表4-3 关系运算符

☆大牛提醒☆

关系运算符中的等于号“==”很容易与赋值号“=”混淆,一定要记住,“=”是赋值运算符,而“==”是关系运算符。

【实例4.3】使用关系运算符判断数值5与6的关系(源代码\ch04\4.3.txt)。

    #include <iostream>
    using namespace std;
    int main()
    {
         int a = 5;
         int b = 6;
         if(a == b)
         {
                cout << "第1行 : a等于b " << endl;
         }
         else
         {
                cout << "第1行 : a不等于b " << endl;
         }
         if(a < b)
         {
                cout << "第2行 : a小于b " << endl;
         }
         else
         {
                cout << "第2行 : a不小于b " << endl;
         }
         if(a > b)
         {
                cout << "第3行 : a大于b " << endl;
         }
         else
         {
                cout << "第3行 : a不大于b " << endl;
         }
         /* 改变 a 和 b 的值 */
         a = 7;
         b = 8;
         if(a <= b)
         {
                cout << "第4行 : a小于或等于b " << endl;
         }
         if(b >= a)
         {
                cout << "第5行 : b大于或等于a" << endl;
         }
    }

程序运行结果如图4-3所示。

图4-3 例4.3的程序运行结果

4.1.4 逻辑运算符

C++语言为用户提供了逻辑运算符,包括逻辑与、逻辑或、逻辑非3种逻辑运算符。逻辑运算符两侧的操作数需要转换成布尔值进行运算。逻辑与和逻辑非都是二元运算符,要求有两个操作数,而逻辑非为一元运算符,只有一个操作数。

如表4-4所示,列出了C++语言支持的逻辑运算符(这里假设变量A的值为1,变量B的值为0)。

表4-4 逻辑运算符

为了方便掌握逻辑运算符的使用,逻辑运算符的运算结果可以用逻辑运算的“真值表”来表示,如表4-5所示。

表4-5 真值表

☆大牛提醒☆

逻辑运算符与关系运算符的返回结果一样,分为“真”与“假”两种,“真”为“1”,“假”为“0”。

【实例4.4】使用逻辑运算符判断数值5与6的关系(源代码\ch04\4.4.txt)。

    #include <iostream>
    using namespace std;
    int main()
    {
       int a = 5;
       int b = 6;
       int c ;
       if( a && b )
       {
              cout << "第1行:条件为真 " << endl;
       }
       if( a || b )
       {
              cout << "第2行:条件为真 " << endl;
       }
       /* 改变a和b的值*/
       a = 0;
       b = 10;
       if( a && b )
       {
              cout << "第3行:条件为真 " << endl;
       }
       else
       {
              cout << "第3行:条件为假" << endl;
       }
       if( !(a && b) )
       {
              cout << "第4行:条件为真" << endl;
       }
    }

程序运行结果如图4-4所示。

图4-4 例4.4的程序运行结果

4.1.5 赋值运算符

赋值运算符为二元运算符,要求运算符两侧的操作数类型必须一致(或者右边的操作数必须可以隐式转换为左边操作数的类型)。C++语言中提供的简单赋值运算符如表4-6所示。

表4-6 赋值运算符

【实例4.5】使用赋值运算符对5进行赋值运算(源代码\ch04\4.5.txt)。

    #include <iostream>
    using namespace std;
    int main()
    {
        int a = 5;
        int c ;
        c =  a;
        cout <<"第1行:=  运算符实例,c 的值 ="<< c<<endl;
        c +=  a;
        cout <<"第2行:+= 运算符实例,c 的值 ="<< c<<endl;
        c -=  a;
        cout <<"第3行:-= 运算符实例,c 的值 ="<< c<<endl;
        c *=  a;
        cout <<"第4行:*= 运算符实例,c 的值 = "<< c<<endl;
        c /=  a;
        cout <<"第5行:/= 运算符实例,c 的值 = "<< c<<endl;
        c  = 100;
        c %=  a;
        cout <<"第6行:%= 运算符实例,c 的值 ="<< c<<endl;
        c <<=  2;
        cout <<"第7行:<<= 运算符实例,c 的值 ="<< c<<endl;
        c >>=  2;
        cout <<"第8行:>>= 运算符实例,c 的值 ="<< c<<endl;
        c &=  2;
        cout <<"第9行:&= 运算符实例,c 的值 ="<< c<<endl;
        c ^=  2;
        cout <<"第10行:^= 运算符实例,c 的值 ="<< c<<endl;
        c |=  2;
        cout <<"第11行:|= 运算符实例,c 的值 ="<< c<<endl;
    }

程序运行结果如图4-5所示。

图4-5 例4.5的程序运行结果

☆大牛提醒☆

在书写复合赋值运算符时,两个符号之间一定不能有空格,否则将会出错。

4.1.6 位运算符

任何信息在计算机中都是以二进制的形式保存的,位运算符是对数据按二进制位进行运算的运算符。C++语言中提供的位运算符如表4-7所示(这里假设变量A的值为60,变量B的值为13)。

表4-7 位运算符

【实例4.6】使用位运算符对数值60和13进行位运算(源代码\ch04\4.6.txt)。

    #include <iostream>
    using namespace std;
    int main()
    {
       unsigned int a = 60;     /* 60 = 0011 1100 */
       unsigned int b = 13;     /* 13 = 0000 1101 */
       int c = 0;
       c = a & b;                   /* 12 = 0000 1100 */
       printf("第1行:c 的值是 %d\n", c );
       c = a | b;                   /* 61 = 0011 1101 */
       printf("第2行:c 的值是 %d\n", c );
       c = a ^ b;                   /* 49 = 0011 0001 */
       printf("第3行:c 的值是 %d\n", c );
       c = ~a;                     /*-61 = 1100 0011 */
       printf("第4行:c 的值是 %d\n", c );
       c = a << 2;                  /* 240 = 1111 0000 */
       printf("第5行:c 的值是 %d\n", c );
       c = a >> 2;                  /* 15 = 0000 1111 */
       printf("第6行:c 的值是 %d\n", c );
    }

程序运行结果如图4-6所示。

图4-6 例4.6的程序运行结果

4.1.7 杂项运算符

在C++语言中,除了算术运算符、关系运算符、逻辑运算符等,还有其他一些重要的运算符,如表4-8所示。

表4-8 杂项运算符

【实例4.7】杂项运算符的应用(源代码\ch04\4.7.txt)。

    #include <iostream>
    using namespace std;
    int main()
    {
       int a = 4;
       short b;
       double c;
       int *ptr;
       /* sizeof()运算符实例 */
       printf(第1行:变量 a 的大小 = %lu\n", sizeof(a) );
       printf(第2行:变量 b 的大小 = %lu\n", sizeof(b) );
       printf(第3行:变量 c 的大小 = %lu\n", sizeof(c) );
       /* & 和 * 运算符实例 */
       ptr = &a; /* ptr包含a的地址 */
       printf("a 的值是 %d\n", a);
       printf("*ptr 是 %d\n", *ptr);
       /* 三元运算符实例 */
       a = 10;
       b = (a == 1) ? 20:30;
       printf( "b 的值是 %d\n", b );
       b = (a == 10) ? 20:30;
       printf( "b 的值是 %d\n", b );
    }

程序运行结果如图4-7所示。

图4-7 例4.7的程序运行结果

4.1.8 逗号运算符

C++提供一种特殊的运算符—逗号运算符,用它可以将两个表达式连接起来。逗号运算符是优先级最低的运算符,它可以使多个表达式放在一行上,从而大大简化了程序。逗号表达式又称为顺序求值运算符。逗号表达式的一般格式如下:

    表达式1,表达式2

逗号表达式的求解过程是:先求解表达式1,再求解表达式2。整个逗号表达式的值是表达式2的值。

注意:程序中使用逗号表达式,通常是要分别求逗号表达式内各表达式的值,并不一定要求整个逗号表达式的值。

一般情况下,使用逗号运算符来进行多个变量的初始化或者执行多个自增语句。然而,逗号表达式是可以作为任意表达式的一部分的。它用于把多个表达式连接起来,用逗号进行分隔的表达式列表的值就是其中最右边表达式的值,其他表达式的值都会被丢弃。这就意味着最右边表达式的值就是整个逗号表达式的值。

下面通过一个实例来说明逗号运算符的使用方法。

【实例4.8】逗号运算符的应用(源代码\ch04\4.8.txt)。

    #include <iostream>
    using namespace std;
    int main()
    {
         int i, j;
         j = 10;
         i = ( j++, j+100, 999+j );
         cout << i<<endl;
    }

程序运行代码如图4-8所示。在本实例中,首先定义了两个int型变量i和j,给j赋值为10,接着j自增到11,然后把j和100相加,最后把j(j的值仍为11)和999相加,这样最终的结果就是1010。从运行结果来看,使用逗号运算符把i和j的值隔开,实现了逗号运算符顺序求值的过程。

图4-8 例4.8的程序运行结果