zoukankan      html  css  js  c++  java
  • C/C++(基础-运算符详解)

    运算符

    任何表达式是有值的

    int a = 2;
    int b = 3;
    a*=b+4;//a=a*(b+4);"*"*=的优先级层次和=号的层次一样。
    printf("%d
    ",a);//14
    

    %求与运算符号,等同于被求余数的数。而且运算符必须是整数。有时也能用于求整除的数(i%5==0)。
    ++自增运算:
    ++自己独立构成表达式的时候,前后++没有区别,如果++构成的表达式参与了其他表达式的构成运算,前++相当于加一运算,后++先使用后加一,完结后加1

    int a = 5;
    int b = 6;
    printf("%d
    ",a+++b);//12,编译原理编译到a后看能否构成表达式,a++构成表达式
    

    关系表达式的运算结果只有1和0,常用语判断。

    int x = 5;
    int y = 6;
    if(x == y ) {
        printf("x == y
    ");
    }else{
        printf("x != y
    ");
    }
    
    //x != y;
    if(x=y) {//y的值赋给x,if的条件除了0其余为真,内部是以非0判断为真的。
        printf("x==y
    ");
    }else{
        printf("x!=y
    ");
    }
    //x==y;
    
    [5,100)的表示:
    5<= x <100错误的原因:
    优先级相同,则从左至右算,5 <= x,先运算,运算之后将5 <= x的值(0或者1)再和100进行运算。
    5 <= x && x < 100;
    

    &&:将两侧的操作数逻辑化,0为假,非0为真。```c
    int a = 3;
    int b = 5;
    if(a && 5 ) {//3为真,5为真
    printf("xxxx ");
    }
    if((a-a) && (b-a) ) {//a-a=0w为假
    printf("xxxx ");
    }else{
    printf("oooo ");
    }

    !的优先级高于&&,||
    ```c
    int a = 3;
    int b = 5;
    !a < b;//0 < 5 ==== !0
    !(a < b);//==== 0
    

    短路现象:

    int a = 44;
    int b = 55;
    if( (a > 40 ) || (b = 66) ) {
        printf("xxxxx%d
    ",d);
        } else{
            printf("ooooo%d
    ",d);
        }
        //a>40为真,(||只要有一个为真全真)发生短路d=55(d=66的赋值运算没有执行)
    
        if( (a < 40) || (b =66 ) ) {
            printf("xxxxxd%
    ",d);
            }else{
            printf("ooooo%d
    ",d);
            }
            //xxxxx66,第一个不成立,继续判断第二个,b=66,为真。
    
    int a = 44;
    int b = 55;
    if( (a < 40 ) && (b = 66) ) {
        printf("xxxxx%d
    ",d);
        } else{
            printf("ooooo%d
    ",d);
        }
        //a<40为假,(&&只有两个为真全真)发生短路d=55(d=66的赋值运算没有执行)
    
        if( (a > 40) && (b =66 ) ) {
            printf("xxxxxd%
    ",d);
            }else{
            printf("ooooo%d
    ",d);
            }
            //xxxxx66,第一个不成立,(&&只有两个为真全真)不会判断第二个直接为假。
    

    短路提高了效率。

    三元运算

    a>b? c:(d>55?10:20);//从右至左
    int t;
    if(d>55)
        t = 10;
    else
        t = 20;
    
    if(a>b) 
        printf("%d",c);
    else
        printf("%d",t);
    

    逗号表达式:

    int xx;
    xx = 1+1,2+1,3+2,5*5,5*7;//顺序求值遇到","相当于一个表达式,做赋值运算
    printf("xx%d
    ",xx);//2
    xx = (1+1,2+1,3+2,5*5,5*7);//顺序求值,括弧优先级高,一次根据","最右边赋值。
    printf("xx%d
    ",xx);//35
    
    printf("xx%d
    ",1+1,2+1,3+2,5*5,5*7);//根据第一个,但是有问题
    printf("aa%d xx%d
    ",aa 1+1,2+1,3+2,5*5,5*7);//这样是有问题
    
    printf("xx%d
    ",(1+1,2+1,3+2,5*5,5*7 ) );
    
    

    sizeof:类型大小运算
    sizeof是一个关键字而不是一个函数,走关键字的路,让别人去说函数吧。

    char c = 1;
    int i = 10;
    printf("sizeof(c+i)%d
    ",sizeof(c+i));//4显示int的类型
    printf("sizeof c+i %d
    ",sizeof c+i );//11,sizeof没有括弧的时候它的运算符的游戏那几高于+,先算出c的类型长度位1,在参与运算
    
    

    总结:() !,sizeof 算数 > 关系 > 逻辑(除!)?,:,= ,

  • 相关阅读:
    POJ
    Parallel Computing–Cannon算法 (MPI 实现)
    POJ
    POJ 2240
    IOS
    iOS
    js遍历map匹配数据和js遍历数组匹配map数据
    vue v-on:click传递动态参数
    vue 权限控制按钮3种样式、内容、以及跳转事件
    vue v-show与v-for同时配合v-bind使用并在href中传递多个参数的使用方法
  • 原文地址:https://www.cnblogs.com/intelwisd/p/8186424.html
Copyright © 2011-2022 走看看