设为首页 加入收藏

TOP

C++(二):运算符与表达式(一)
2015-01-27 10:19:54 】 浏览:242
Tags:运算 符与 表达式

C++的运算符

C++的运算符十分丰富,使得C++的运算十分灵活方便。例如把赋值号(=)也作为运算符处理,这样,a=b=c=4就是合法的表达式,这是与其他语言不同的。C++提供了以下运算符:

    算术运算符
    +(加) -(减) *(乘) /(除) %(整除求余) ++(自加) --(自减)关系运算符
    >(大于) <(小于) ==(等于) >=(大于或等于) <=(小于或等于) !=(不等于)逻辑运算符
    &&(逻辑与) ||(逻辑或) !(逻辑非)位运算符
    <<(按位左移) >>(按位右移) &(按位与) |(按位或) ^(按位异或) ~(按位取反)赋值运算符 (=及其扩展赋值运算符)条件运算符 (:)逗号运算符 (,)指针运算符 (*)引用运算符和地址运算符 (&)求字节数运算符(sizeof)强制类型转换运算符( (类型) 或类型( ))成员运算符 (.)指向成员的运算符 (->)下标运算符 ([ ])其他 (如函数调用运算符())

    C++算术运算符与算术表达式

    基本的算术运算符

    在本章中主要介绍算术运算符与算术表达式,赋值运算符与赋值表达式,逗号运算符与逗号表达式,其他运算符将在以后各章中陆续介绍。

    常见算数运算符
    运算符 说明 举例
    + 加法运算符,或正值运算符 3+5,+3
    - 减法运算符,或负值运算符 5-2,-3
    * 乘法运算符 3*5
    / 除法运算符 5/3
    % 模运算符,或称求余运算符 %两侧均应为整型数据,如7%4的值为3

    需要说明,两个整数相除的结果为整数,如5/3的结果值为1,舍去小数部分。但是,如果除数或被除数中有一个为负值,则舍入的方向是不固定的。例如,-5/3在有的C++系统上得到结果-1,有的C++系统则给出结果-2。多数编译系统采取“向零取整”的方法,即5/3的值等于1,-5/3的值等于-1,取整后向零靠拢。

    如果参加+, -, *, / 运算的两个数中有一个数为float型数据,则运算的结果是double型,因为C++在运算时对所有float型数据都按double型数据处理。

    算术表达式和运算符的优先级与结合性

    用算术运算符和括号将运算对象(也称操作数)连接起来的、符合C++语法规则的式子,称C++算术表达式。运算对象包括常量、变量、函数等。例如,下面是一个合法的C++算术表达式:
    a*b/c-1.5+'a'

    C++语言规定了运算符的优先级和结合性。在求解表达式时,先按运算符的优先级别高低次序执行,例如先乘除后加减。如有表达式a-b*c,b的左侧为减号,右侧为乘号,而乘号优先于减号,因此,相当于a-(b*c)。如果在一个运算对象两侧的运算符的优先级别相同,如a-b+c,则按规定的“结合方向”处理。

    C++规定了各种运算符的结合方向(结合性),算术运算符的结合方向为“自左至右”,即先左后右,因此b先与减号结合,执行a-b的运算,再执行加c的运算。“自左至右的结合方向”又称“左结合性”,即运算对象先与左面的运算符结合。以后可以看到有些运算符的结合方向为“自右至左”,即右结合性(例如赋值运算符)。关于“结合性”的概念在其他一些高级语言中是没有的,是C和C++的特点之一,希望能弄清楚。

    C++所有运算符以及它们的优先级别和结合性请查看这里:C++运算符优先级表

    表达式中各类数值型数据间的混合运算

    在表达式中常遇到不同类型数据之间进行运算,如:
    10+'a'+1.5-8765.1234*'b'
    在进行运算时,不同类型的数据要先转换成同一类型,然后进行运算。转换的规则按图2.7所示。

    \
    图2.7
    假设已指定i为整型变量,f为float变量,d为double型变量,e为long型,有下面表达式:
    10+'a'+i*f-d/e
    运算次序为:
      进行10+'a'的运算,先将'a'转换成整数97,运算结果为107。进行i*f的运算。先将i与f都转换成double型,运算结果为double型。整数107与i*f的积相加。先将整数107转换成双精度数(小数点后加若干个0,即107.000…00),结果为double型。将变量e转换成double型,d/e结果为double型。将10+'a'+i*f的结果与d/e的商相减,结果为double型。 上述的类型转换是由系统自动进行的。

      C++自增和自减运算符(--和++)

      在C和C++中,常在表达式中使用自增(++)和自减(--)运算符,他们的作用是使变量的值增1或减1,如:
      ++i(在使用i之前,先使i的值加1,如果i的原值为3,则执行j=++i后,j的值为4)
      --i (在使用i之前,先使i的值减1,如果i的原值为3,则执行j=--i后,j的值为2)
      i++ (在使用i之后,使i的值加1,如果i的原值为3,则执行j=i++后,j的值为3,然后i变为4)
      i--(在使用i之后,使i的值减1,如果i的原值为3,则执行j=i--后,j的值为3,然后i变为2)
      ++i是先执行i=i+1后,再使用i的值;而i++是先使用i的值后,再执行i=i+1。

      正确地使用++和--,可以使程序简洁清晰高效。请注意:
        自增运算符(++)和自减运算符(--)只能用于变量,而不能用于常量或表达式。++和--的结合方向是“自右至左”。自增运算符(++)和自减运算符(--)使用十分灵活,但在很多情况下可能出现歧义性,产生“意想不到”的副作用。自增(减)运算符在C++程序中是经常见到的,常用于循环语句中,使循环变量自动加1。也用于指针变量,使指针指向下一个地址。

        C++强制类型转换

        在表达式中不同类型的数据会自动地转换类型,以进行运算。有时程序编制者还可以利用强制类型转换运算符将一个表达式转换成所需类型。例如:
        (double)a (将a转换成double类型)
        (int)(x+y) (将x+y的值转换成整型)
        (float)(5%3) (将5%3的值转换成float型)

        强制类型转换的一般形式为:
        (类型名)(表达式)

        注意:如果要进行强制类型转换的对象是一个变量,该变量可以不用括号括起来。如果要进行强制类型转换的对象是一个包含多项的表达式,则表达式应该用括号括起来。如果写成
        (int)x+y
        则只将x转换成整型,然后与y相加。

        以上强制类型转换的形式是原来C语言使用的形式,C++把它保留了下来,以利于兼容。C++还增加了以下形式:
        类型名(表达式)

        int(x)

        int(x+y)

        类型名不加括号,而变量或表达式用括号括起来。这种形式类似于函数调用。但许多人仍习惯于用第一种形式,把类型名包在括号内,这样比较清楚。

        需要说明的是在强制类型转换时,得到一个所需类型的中间变量,但原来变量的类型未发生变化。例如:
        (int)x
        如果x原指定为float型,值为3.6,进行强制类型运算后得到一个int型的中间变量,它的值等于3,而x原来的类型和值都不变。

        【例2.4】强制类型转换。
        #include 
             
              
        using namespace std;
        int main( )
        {
          float x;
          int i;
          x=3.6;
          i=(int)x;
          cout<<"x="<
              
               运行结果如下:
               
        x=3.6,i=3
        x的型仍为float型,值仍等于3.6。

        由上可知,有两种类型转换,一种是在运算时不必用户指定,系统自动进行的类型转换,如3+6.5。第二种是强制类型转换。当自动类型转换不能实现目的时,
首页 上一页 1 2 3 下一页 尾页 1/3/3
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇ZOJ 2938 Rock Skipping (暴力枚.. 下一篇acd - 1427 - Nice Sequence(线..

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目