Day 5 基本运算符初学与运算

一共有十五个优先级: 同一优先级的运算符,运算次序由结合方向所决定

 

1   ()  []  .  ->        (括号,成员排第一)

 

2   !  ~   -(负号) ++  --   &(取变量地址)*   (type)(强制类型)    sizeof       (单目运算排第二)

 

3   * / %         (乘除余三)

 

4   + -             (加减四)

 

5   >> <<          (移位五)

 

6   > >= < <=     (关系六)

 

7   == !=           (等于不等排第七)

 

8   &             (位“与”)

 

9   ^               (”异或“)

 

10  |               (和位"或")三分天下八九十

 

11  &&            (逻辑 ”与“)

 

12  ||                (和”或“)十一和十二

 

13  ?:                (条件运算符)

 

14   =  +=  -=  *=  /=   %=  |=   ^=   &=   >>=   <<=    (条件高于赋值)

 

15  ,             (逗号优先级最低)

结合性:2   13  14  是从右至左   其他都是  从左至右有问题可以在交流的

 

括号成员第一;        //括号运算符[]() 成员运算符.  ->

 

全体单目第二;        //所有的单目运算符比如++、 --、 +(正)、 -(负) 、指针运算*、&

 

乘除余三,加减四;   //这个"余"是指取余运算即%

 

移位五,关系六;    //移位运算符:<< >> ,关系:> < >= <= 等

 

等于(与)不等排第七;    //即== 和!=

 

位与异或和位或;    //这几个都是位运算: 位与(&)异或(^)位或(|)   

 

"三分天下"八九十; 

 

逻辑或跟与;            //逻辑运算符:|| 和 &&

 

十二和十一;            //注意顺序:优先级(||)  底于 优先级(&&)

 

条件高于赋值,        //三目运算符优先级排到13 位只比赋值运算符和","高

 

逗号运算级最低!    //逗号运算符优先级最低

 

基本算术运算符:+ (加)、 - (减) 、 * (乘) 、 / (除) 和 % (求余数)

这五个运算符的优先级为:

             */ %同级,但比+-高。即先乘除后加减。 

两个整数相除,结果为一整数;分子小于分母,结果为零。

 例如:  5/2    结果为 2

               2/5    结果为 0

 

 

这五个运算符的结合性为:自左至右。

例如:10+6- 4*2

第一步先计算10+6,得结果16,第二步计算4*2,得结果8,然后用第一步计算的结果减第二步计算的结果,得结果8。

 

余数计算方法:

 

             5%3   余数是2

            5%8   余数是5

           -5%3  余数是 –2    (注意:符号位取<操作数1>的符号)

      5%-3  余数是 2      (注意:符号位取<操作数1>的符号)

隐式转换:在编译时由编译程序按照一定规则自动完成,不需人为干预

 

数据参加运算前要进行下列转换:

char,short→int→float→double

 

混合运算时数据类型由低级→高级

unsigned → int → long → double

 

以上并不意味着unsigned必须到int再到long的依次转换,而是由算式中的最高级进行转换的。

复合的赋值运算符:(共十个)

+= ,  -= ,  *= ,  /=  ,   %= ,

       <<= ,  >>= ,  &= ,  ^= ,  |=

 

例如:   a += 3        等价于     a=a+3

                    x *= y+8    等价于     x=x*(y+8)

                    x %= 3       等价于     x=x%3

赋值表达式:由赋值运算符将一个变量和一个表达式连接起来的式子。

         格式为:<变量>  <赋值运算符>   <表达式>

 

 例如:int x,y,z;

      x=y=z=5+6;

 

              int  x=3,y=4;

              x*=y+1;   

              ( x=等价与  x*(y+1);)

 

             int x;

             x='a'; 

          

赋值运算符结合率为:自右而左

例如:a=b=c=5               a=(b=(c=5))   a,b,c值都是5

            a=5+(c=6)            c值为6, a值为5+6 (即11)

            a=(b=4)+(c=6)     b值为4,c值为6,a值为4+6 (即10)

关系运算符:关系运算符用于两个数值之间的比较运算。C语言提供6种关系运算符:

<、<=、>、>=、  优先级相同高

                         ==、!=                    优先级相同低

 

关系运算符的结合率为:“自左而右

(即当优先级相同时按自左而右结合a>b>c,当优先级不同时按优先级高低结合a=b+c)

关系运算符、算术运算符和赋值运算符的优先级为:

 

  例如:  1、c>a+b          等效于     c>(a+b)

                  请写出以下三个的等效

2、a>b!=c          等效(a>b)!=c

                  3、a==b<c           等效a==(b<c)

                  4、a=b>c            等效a=b>c

关系表达式:由关系运算符和操作数组成的表达式称为关系表达式。

关系表达式的值是一个逻辑型的值,即只有两个值(真和假)。

C语言是用1作为真,用0作为假。但是进行运算时,0即认为真,0才认为假。而表达式的结果为真时,给出真值1。为假时,给出假值0。

 例1:有int x=2,y=3,z=5;

             则:x>y     结果为0。

                     z>=y    结果为1。

                     z==y    结果为0。

 

例2:  若  a=3,b=2,c=1

                      f=a>b>c

得f=0

逻辑运算符:

优先级: !>&&>||

用逻辑运算符将关系表达式或逻辑量连接起来的式子。

运算结果为:“真”或“假”值。

系统在运算时以0即为真,以0为假

 

 

例如:  4  && 0 || 2   的值为1

                 5  && !0     的值为1

 

逻辑、关系、算术和赋值运算符的优先级为:

 

条件运算符:

条件表达式的一般格式为:

表达式1  ?  表达式2  :    表达式3      

运算过程:表达式1的结果为真(非0)时,表达式2的计算结果作为条件表达式的值;否则,取表达式3的计算结果为条件表达式的值。

 

如:a>b?a:b 

 

条件运算符的优先级低于逻辑、关系、算术运算符高于赋值运算符。

如: a>b?a:b+1     相当于     (a>b)?a:(b+1) 

逗号运算符:

格式: 表达式1, 表达式2, 表达式3, LL, 表达式n

        优先级: 最低

        从左向右计算每个表达式的值,逗号表达式的值为表达式n的值。

例如:

                     y=(x=3,5+6,x+5) 逗号表达式的值为?  y=8

自增、自减运算符:++ ,  --  (使变量的值增1或减1)

例如:  ++i  ,  --i     (先自增或自减再使用)

    i++  ,   i--    (先使用后自增或自减)

 

若有 int i=3,j;   则:

① j=++i;   i的值为3+1 即4 , j的值为4;

② j=i++;     j的值为3 ,  i的值为3+1=4 。

又如:i=3;

            printf("%d",++i);    /*输出为4*/

            printf ("%d", i++);    /*输出为3*/

 

 

 

例如:

1、z = i+++j;  i = 1,j = 2则i = ?,j = ?z = ?  看成z=(i++)+j  i=2 j=2 z=3

2、z = x++, y++, ++y;

x = 1, y = 1;则 x = ?,y = ?,z = ?  x=2 y=3 z=1

3、j = ++i + ++i + ++i;

i = 1; j = ?   j=10

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值