栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

C语言中的运算符(超级详细)

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

C语言中的运算符(超级详细)

目录

一、C运算符有哪些?

二、运算符的优先级和使用方式 

三、不同类型数据间的混合运算

四、强制类型转换运算符


一、C运算符有哪些?

c语言提供了以下运算符:

算术运算符+、-、*、/、%、++、- - 
关系运算符>、<、==、>=、<=、!=
逻辑运算符!、&&、||
位运算符<<、>>、~、|、^、&
赋值运算符=及其扩展赋值运算符
条件运算符?:
逗号运算符

,

指针运算符*和&
求字节数运算符sizeof
强制类型转换运算符

(类型)

成员运算符. 、->
下标运算符[ ]
其他如函数调用运算符()

二、运算符的优先级和使用方式 
优先级  运 算 符             含    义  要求运算对象的个数             结合方向
    1    ( )圆括号            自左至右
       [ ]下标运算符
       ->指向结构体成员运算符
        .结构体成员运算符
   2       !逻辑非运算符

                  1

       (单目运算符)

           自右至左
       ~按位取反运算符
      ++ 自增运算符
       --自减运算符
        -负号运算符
    (类型)类型转换运算符
        *指针运算符
       &取地址运算符
    sizeof长度运算符
   3        *乘法运算符

                   2

       (双目运算符)

           自左至右
        /除法运算符
       %求余运算符
   4        +加法运算符

                  2

       (双目运算符)

           自左至右
        -减法运算符
   5       <<左移运算符

                  2

       (双目运算符)

           自左至右
       >>右移运算符
   6< <= > >=关系运算符

                  2

       (双目运算符)

           自左至右
   7      ==等于运算符

                  2

       (双目运算符)

           自左至右
      !=不等于运算符
   8      &按位与运算符

                  2

       (双目运算符)

           自左至右
   9      ^按位异或运算符

                  2

       (双目运算符)

           自左至右
  10      | 按位或运算符

                 2

       (双目运算符)

           自左至右
  11     &&逻辑与运算符

                 2

       (双目运算符)

           自左至右
  12     | |逻辑或运算符

                 2

       (双目运算符)

           自左至右
  13     ? :条件运算符

                 3

       (三目运算符)

           自右至左
  14

= += -= *=

/= %= &=

>>= <<=

^= 

赋值运算符

                 2

       (双目运算符)

           自右至左
  15       ,

逗号运算符

(顺序求值运算符)

                 2

       (双目运算符)

           自左至右

说明:(1)同一优先级的运算符,运算次序由结合方向决定。

           (2)不同的运算符要求有不同的运算对象个数,如+和-为双目运算符,要求在运算符两侧各有一个运算对象(如3+5、9-2等)。

           (3)优先级总结:

                                       初等运算符->单目运算符->算术运算符(先乘除,后加减)->关系运算符                                          ->逻辑运算符(不包括!)->条件运算符->赋值运算符->逗号运算符

以上的优先级由左到右、由上到下依次递减。

三、不同类型数据间的混合运算

        在程序中经常会遇到不同类型的数据进行运算,如5*4.5。如果一个运算符两侧的数据类型不同,,则先自动进行类型转换,使二者成为同一种类型,然后进行运算。整型、实型、宇符型数据间可以进行混合运算。规律为:
       (1)+、-、*、/运算的两个数中有一个数为 float或 double型,结果是double型,因为系统將所有 float 型数据都先转换为 double型,然后进行运算。
       (2)如果 int 型与 float 或 double型数据进行运算,先把 int 型和 float 型数据转换double 型,然后进行运算,结果是double型。
         (3)字符(char)型数据与整型数据进行运算,就是把宇符的 ASCII代码与整型数据进行运算。如:12十A',由于字行 A 的 ASCI 代码是 65,相当于12十65,等子77)如果字符型数据与实型数据进行运算,则将字符的 ASCII 代码转换为 double/型数据,然后进行运算。
        以上的转换是编译系统自动完成的,读者不必过问。
        分析下面的表达式,假设已指定i为整型变量,值为3,f为float 型变量,值为 2.5,d为double 型变量,值为 7.5。
        10+'a’+i* f-d/3
编译时,从左至右扫描,运算次序如下:
        ① 进行10+’a’的运算,’a’'的值是整数 97,运算结果为 107。
        ②由于“ * ”比“ + ”优先级高,先进行" * "的运算。先将i与f都转成 double 型,运算结果为7.5,double型。
        ③整数 107 与 i * f 的积相加。先将整数 107 转换成双精度数,相加结果为 114.5,double 型。
        ④进行d/3 的运算,先将3转换成 double型,d/3结果为 2.5,double 型。
        ⑤将10 十 'a’ + i * f 的结果 114.5 与 d/3 的商2.5相减,结果为 112.0,double 型。

四、强制类型转换运算符

        可以利用强制类型转换运算符将一个表达式转换成所需要的类型。如:

        (double)a                 (将a装换为double型)

        (int)x+y                     (将x+y的值转换为int型)

        (float)(5%3)              (将5%3的值转换为float)

        其一般形式为:(类型名)(表达式)

        注意,表达式应该用括号括起来。如果写成    (int) x+y
则只将x转换成整型,然后与y相加。
        需要说明的是,在强制类型转换时,得到一个所需头型的中间数据,而原来变量的类型未发生变化。例如:a= (int) x
如果己定义x 为float 型变量,a 为整型变量,进行强制类型运算(int)x后得到一个int 类型的临时值,它的值等王x的整数部分,把它赋给a,注意x的值和类型都未变化,仍为 float型。该临时值在赋值后就不再存在了。
        从上可知,有两种类型转换。一种是在运算时不必用户干预,系统自动进行的类型转换(自动类型转换),如 3十6.5。另一种是强制类型转换。当自动类型转换不能实现目的时,可以用强制类型转换。如%运算符要求其两侧均为整型量,若x为float 型,则x%3不合法,必须用(int)x%3。从文章开头的表格可以得知,强制类型转换运算优先于%运算,因此先进行(int) x的运算,得到一个整型的中间变量,然后再对3求余。此外,在函数调用时,有时为了使实参与形参类型一致,可以用强制类型转换运算符得到一个所需类型的参数。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/1012065.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号