C語言基礎三:表達式與運算符

1.表達式
    在c語言中表達式是用  運算符連接操作數  並且表達某種意思的式子
    既然是表達是就會有一個值
    3+4 a+b
2.運算符:
    幾目運算符?
        a)單目運算符:操作數只有一個!
        b)雙目運算符:操作數只有二個
        c)三目運算符:操作數只有三個 ? :
        性質:
            優先級 
            結合性:從左到右,從右到左    
            int a =2;
            int b=3;
            int c;
            c=b=a;
    2.1算數運算符:從左至右 
        1.雙目運算符
            * / % 
            + - 
            ps:
                1)3+2*5  <====>13
                2)3/2    整數除整數只能爲整數
                        double a=3/2   1.000000
                        int a=3/2      1
                        int a=3/2*1.0  1
                        如果想要結果爲小數,在分子分母后面*1.0 並且賦值的類型必須爲float double
                        自動向高精度靠攏
                3)%左右兩邊只能爲整數  3%2  1 3%-2    a%b=a-(a/b)*b  對取餘存在負數,看被除數
                4)4/0 4%0 //error  浮點數例外 (核心已轉儲)
        2.單目運算符 ++ --
                    表達式的值          i的值
            i++            i                i=i+1
            ++i         i+1              i=i+1
            i--         i                i=i-1
            --i            i-1              i=i-1
            
    2.2關係運算符:判斷2個操作數的關係 從左到右
        > >= < <= == !=
        關係表達式的值:
            1(表達式成立)   0(關係不成立)
            
            ps:5>4>3   =====>(5>4) ==>  1>3  ===>0
    2.3邏輯運算符:表達某個式子邏輯
        表達式的值:
            非0  真(1)
             0   假(0)
        !   非      單目    
         &&   與         雙目   從左至右     並且:有0就是0
            1&&0  0    
            1&&1  1  
            0&&0  0
            0&&1  0 
        ||   或         雙目    從左至右      或者:有1就是1
        
        ex.
            a=4 b=5
            !a       0
            4&&5     1
            !0       1
            4&&5&&0  0
        惰性運算:
            並不是所有邏輯符後面的表達式都會被執行
            1)a&&b&&c 
                如果判斷a是假的,那麼b和c都不會被執行
            2)a||b||b
                如果判斷a是真的,那麼b和c都不會被執行

                ex.int a=1;
                    a&&a--&&a--    表達式值是多少? 0 
                    a||a--         a的值是多少?    1
        ex.判斷某年是否爲閏年
            1)可以被400整除
            2)可以被4整除 並且不能被100整除
            
         1.1)||2)
         2.a%400==0
         3.a%4==0&&a%100!=0
            
    2.4位運算符
        ~ | & << >>  ^
        a).&(按位與)
            1&1=1
            1&0=0
            0&1=0
            0&0=0
            3&5  表達式的值  011 & 101   001  
            6&10 表達式的值 (用補碼計算)
                            
        用途:
            1)把某些位置0
                ex.int flag ;把flag低4位置0 flag=flag&0xfffffff0
            2)保留數中某些位
            3)取指定位
        b).   |(按位或)
            1|1=1
            1|0=1
            0|1=1
            0|0=0
            用途:把某些位置1
                ex.int flag ;把flag低4位置 flag=flag|0xf
        c)  ^(按位異或)            
            1^1=0
            1^0=1
            0^1=1
            0^0=0(同0異1)
                
                用途:1)把一個數清0
                                ex0.5^5   0
                                ex1.3^5   值011 ^101    結果:110  6
                                ex2.不用臨時變量交換2個數的值
                                    a=a^b //a1  b1
                                    b=a^b;  //b=a1^0;
                                    a=a^b;// a=0^b1
                      2)可以把原來的數取反
                        x^1=~x
                        x^0=x
        d)  <<(左移運算)  雙目運算符
                規則:高位捨棄 低位補0
                ex.(2<<4) <=====> 2*2(4)
                    int a=1;
                    int b=3;
                    a<<b   表達式的值:8 a的值:1
        e) >>(右移運算)
                規則:
                    無符號數:低位右移捨棄 高位補0
                    有符號數:低位右移捨棄 高位補符號位
                    x>>n;
                    2>>1 表達式的值:1
                    如果爲正數,相當於除以2的n次方
        f)  ~(按位取反) 單目運算
            規則:0 - 1
                  1 - 0
            
                ex.把flag的第23位置0
                    flag=flag&( ~(1<<22));
                    把flag的第23位置1
                    flag=flag|( (1<<22)  );
    2.5
        賦值運算符:雙目運算符(從右向左)
            3=4;
            賦值號的左邊必須爲地址
            int a;
            a=4////error
            a+=3;  a=a+3
            a*=3; a=a*3
            a-=3; a=a-3;
            a/=3; a=a/3;
            int b=3,c=4;
            a=b=c;  //a=4,b=4
     2.6
        條件運算符
            表達式 ?a:b
            規則:如果表達式爲真,取a,否則取b
    2.7
        逗號運算符(雙目運算符)從左至右
        b=(a=表達式1,表達2,....表達式n);
            1.先算表達式1賦值給a
            2.算表達值2
            3.算表達式n賦值給b
    2.8
        指針運算符(* &)
    2.9
        字節運算符
            求數據類型所佔的字節數大小
            sizeof(0.8)
            sizeof(int)
        
    2.10 分量運算符(. ->)
            struct student
            {
                char name[10];
                char sex;//成員變量
                int no;
            };
            struct student a;
            printf("%d",a.no);
            struct student *a;
            printf("%d",a->no);
    2.11
        強制類型轉換運算符
        float a=3.6;
        int b=(int)a+4;
    
    優先級:
        !>算數運算符>關係運算符>&&>||>條件運算符>賦值>逗號運算符
        記不清用括號
            
        
        
        
        
        
        
        

發佈了60 篇原創文章 · 獲贊 4 · 訪問量 1萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章