C中运算符的整理

所有运算符按排行如下

 
优先 级运算符运算对象要求个数运算方向
1

()     [ ]       - >     .   

 左  至   右
2

! ~  ++  --    - (负号)  (type)  &   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目运算符右  至   左

其中   ,  运算符为最低级的运算符 。

看几个例子:

#include <stdio.h>

int main(){
    //  No 1
    int a,b,c = 1;
    a = 1;
    c = ++a;
    printf("%d   %d \n",a,c);
    b = c++;
    printf("%d   %d \n",c,b);
    /*
      结论: ++a  从右至左   右侧没有没有数据的时候 。
            a++   的运算优先级 直接降低在14之后 ,也就是赋值运算符后面。
     */
    int j = 0;
    if(j=j++){
        printf("*%d\n",j);
    }
    if(j= ++j){
        printf("**%d\n",j);
    }
    if(j=j--){
        printf("***%d\n",j);
    }
    /*
    结论: 
    1.当在进行逻辑运算时 。 = 式两边看 右 侧;
    2.印证了第一点的结论
    */
    return 0;
 
}
/*

输出结果:
2   2
3   2
**1
***1

*/

之后看一个比较难得例子:

//  字符串的复制

#include <stdio.h>

int main(){
    char str1[20] = "hollow";
    char str2[20];
    char *p1 = str1;
    char *p2 = str2;

    while(*p2++ = *p1++);
    /* 解释一下一步一步来:
        其中出现   () * ++  =  运算符. 
        () 属于 一级 也就是最高级运算符。
        其中 * 运算符与 ++ 运算符同属 第二级, 操作方向自右至左;
        赋值运算符 属于 14 级。  操作方向  自右至左;
        so: 括号中  从右边看起由于 其右侧没有任何数据。因此自降运算级别在 14 到  15之间 。
            然后直接 *p1 。 此时判断  while()。
            若存在,为 *p2 赋值,若不存在。 退出循环。
            若还在循环  p2++ ; p1++ ; 这个很清晰
            直接就是数组的指针运算
    */
    printf("%s",str1);
    return 0;
}

 

 

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值