C++基礎(chǔ)學(xué)習(xí)筆記5 - 運(yùn)算符

運(yùn)算符?加、減、乘、除?

簡(jiǎn)單的說(shuō):C++ 運(yùn)算符只有:條件運(yùn)算符、關(guān)系運(yùn)算符、邏輯運(yùn)算符、數(shù)學(xué)運(yùn)算符、位運(yùn)算符、自增自減運(yùn)算符、賦值 與 自賦值運(yùn)算符

我們先看賦值運(yùn)算符:

#include <iostream>

//自賦值運(yùn)算符

void main()
{
    int a = 1;
    a += 10;//      a = a + 10; a 為 11
    a -= 5; //      a = a - 5;  a 為 6
    a *= 3; //      a = a * 3;  a 為 18
    a /= 2; //      a = a / 2;  a 為 9
    a %= 4; //      a = a % 4;  a 為 1
    a &= 10;//      a = a & 10; a 為 0
    a |= 10;//      a = a | 10;
    a ^= 5;//       a = a ^ 5;
    a <<= 3;//      a = a << 3;
    a >>= 3;//      a = a >> 3;
    
    system("pause");
}

條件運(yùn)算符:

#include <iostream>

//條件運(yùn)算符  ? :

/*
    假設(shè) 有表達(dá)式 A B C  組成條件表達(dá)式  A ? B : C;

    條件運(yùn)算符的嵌套

    A ? B : C;  B 或者 C 部分 可以再寫成 條件表達(dá)式

    A ? (A?B:C) : C;            A ? B : (A?B:C);
    A ? (A?B:C) : (A?B:C);
    
    其執(zhí)行順序?yàn)椋?    1)執(zhí)行A 判斷 A的結(jié)果 為真 還是 假
    2)如果為真 執(zhí)行 B語(yǔ)句  A C 等同于沒(méi)有  只剩下  B;
    3) 如果為假 執(zhí)行 C語(yǔ)句  A B 等同于沒(méi)有  只剩下  C;

    主語(yǔ) B  C 語(yǔ)句 必須是同類型
    比如 如果 B 有返回值 是表達(dá)式 那么 C 必須一樣
    如果 B 是無(wú)返回值的 代碼語(yǔ)句 C 也必須一樣

    std::cout 就沒(méi)有返回值    1 + 1 這個(gè)表達(dá)式 就有返回值
*/

void main()
{
    int a, b;

    a = 10;
    b = 20;

    a > b ? std::cout<<"a 大于 b\n" : std::cout<<"a 小于 b\n";

    //此處為真 那么 A C 部分 等于沒(méi)有  
    //整個(gè)語(yǔ)句相當(dāng)于  int c = a + 10;
    //所以 是 可以執(zhí)行的 沒(méi)有語(yǔ)句錯(cuò)誤
    int c =  a < b ? a + 10 : b - 10;

    std::cout<<c<<"\n";

    system("pause");
}

關(guān)系運(yùn)算符:

#include <iostream>

//關(guān)系運(yùn)算符

//關(guān)系運(yùn)算符的結(jié)果 是 bool

// ==   !=    >   <   >=   <=

void main()
{
    int a, b;

    bool c;

    //相等判斷運(yùn)算符 ==        A == B;

    //會(huì)判斷  == 該符號(hào) 左右 兩邊的結(jié)果 是否相等
    //如果相等 整個(gè)表達(dá)式 為 真  否則 為假

    a = 1;
    b = 2;

    c = (a == b);
    // a 的 值為1  b 的值 為2  那么 a 和 b 不相等  a == b為假

    //不相等 判斷運(yùn)算符  !=     A != B
    //判斷不相等  只要 A 和 B 不相等 那么 A != B 為真
    // A B 相等  A != B 為假

    c = (a != b);
    //a 值為 1  b 值為 2  不相等 所以  a != b 為真

    //大于判斷運(yùn)算符 >  A > B
    
    //a 值為 1  b 值為 2  a 小于 b 所以  a > b 為假
    c = (a > b);

    //小于判斷運(yùn)算符 <     A < B
    
    //a 值為 1  b 值為 2  a 小于 b 所以  a < b 為真
    c = (a < b);

    //大于等于判斷運(yùn)算符 >=      A >= B
    //只要 滿足 大于 或者 等于 其中一個(gè)條件  就為真
    
    //a 值為 1  b 值為 2  a 小于 b 所以  a >= b 為假
    c = (a >= b);


    //小于等于判斷運(yùn)算符 <=      A <= B
    //只要 滿足 小于 或者 等于 其中一個(gè)條件  就為真
    
    //a 值為 1  b 值為 2  a 小于 b 所以  a <= b 為真
    c = (a <= b);

    system("pause");
}

邏輯運(yùn)算符:

#include <iostream>

//邏輯運(yùn)算符

void main()
{
    //邏輯 與 運(yùn)算符 &&
    /*
        假設(shè)有表達(dá)式 A、B 組成的邏輯表達(dá)式 A&&B
        
        該表達(dá)式會(huì)返回一個(gè)bool 結(jié)果
        表達(dá)式會(huì)先 得到 A 的結(jié)果 并判斷真 假
        如果A 為 真   就繼續(xù)判斷 B的 真 假
        如果B 為 真 那么整個(gè)表達(dá)式(A&&B) 返回 真
        簡(jiǎn)單說(shuō):
        A為真  B為真  表達(dá)式 為真
        A為真  B為假  表達(dá)式 為假
        A為假  B將不計(jì)算  表達(dá)式為 假
    */

    int a;
    int b;

    a = 1;
    b = a-- && a++;
    std::cout<<a<<" "<<b<<"\n";

    a = 1;
    b = --a && a++;
    std::cout<<a<<" "<<b<<"\n";

    //邏輯 或 運(yùn)算符 ||
    /*
        假設(shè)有表達(dá)式 A、B 組成的邏輯表達(dá)式 A||B
        
        該表達(dá)式會(huì)返回一個(gè)bool 結(jié)果
        表達(dá)式會(huì)先 得到 A 的結(jié)果 并判斷真 假
        如果A B 有一個(gè) 為真 那么 表達(dá)式 返回真
        如果A B 都為假 表達(dá)式 返回 假
        簡(jiǎn)單說(shuō):
        A為真  B將不計(jì)算 表達(dá)式 為真
        A為假  B為真  表達(dá)式 為真
        A為假  B為假  表達(dá)式 為假
    */

    a = 1;
    b = a-- || a++;
    std::cout<<a<<" "<<b<<"\n";

    a = 1;
    b = --a || a++;
    std::cout<<a<<" "<<b<<"\n";

    //邏輯 非  !
    a = 1;
    b = 0;

    //此處 a的值是1 為真 
    //在 a 的前面 加上 ! 那么a為假
    //也就是 真變假   假變真
    !a; //結(jié)果為假
    !b; //結(jié)果為真
    
    system("pause");
}

數(shù)學(xué)運(yùn)算符:

#include <iostream>

//加+  減-  乘*     除/ 取余%

void main()
{
    int a = 10;

    int b = 20;

    int c = 30;

    //和原來(lái)學(xué)習(xí)的數(shù)學(xué)計(jì)算方式一樣 
    //先 乘除 后 加減  優(yōu)先計(jì)算括號(hào)內(nèi)的
    int d = a + b * c;

    //除法稍有不同 (因?yàn)閰⑴c計(jì)算的變量類型)
    //這里10 / 4 的結(jié)果 應(yīng)該是 2.5
    //但是 由于 10 是 int 類型的常量 4 也是 int 類型
    //的 常量 所以  int / int 結(jié)果 也是一個(gè) int
    //所以 這里 10 / 4的結(jié)果是 2 小數(shù)部分 不做保留
    d = 10 / 4;

    //取余 整數(shù)的除法 我們可以看成兩個(gè)部分  商 和 余
    //比如 15 除以 6 得到的結(jié)果就是 2 和 3
    //那么 用除號(hào) / 得到的就是 商  2
    //     用取余 % 得到的就是 余數(shù)3

    d = 15 / 6;
    d = 15 % 6;

    system("pause");
}

位運(yùn)算符:

#include <iostream>

//位運(yùn)算符

/*
    位運(yùn)算符的處理 是在二進(jìn)制位的層面上進(jìn)行處理的
    位的操作是非???。
*/

void main()
{
    int a = 12345;
    int b = 67891;
    int c;
    char d; 
    //按位與  &        二進(jìn)制位 同為1 則 為1  反之為0

    c = a & b;
    //a 0000 0000   0000 0000   0011 0000   0011 1001
    //&
    //b 0000 0000   0000 0001   0000 1001   0011 1111
    
    //同1為1 反之為0

    //c 0000 0000   0000 0000   0000 0000   0011 0001


    //按位或 | : 二進(jìn)制位 同為0則為0  反之為1

    c = a | b;
    //a 0000 0000   0000 0000   0011 0000   0011 1001
    //|
    //b 0000 0000   0000 0001   0000 1001   0011 1111
    
    //同0為0 反之為1

    //c 0000 0000   0000 0001   0011 1001   0011 1111

    //按位異或 ^  相同為0  不同為1

    c = a ^ b;
    //a 0000 0000   0000 0000   0011 0000   0011 1001
    //|
    //b 0000 0000   0000 0001   0000 1001   0011 1111
    
    //相同為0  不同為1

    //c 0000 0000   0000 0001   0011 1001   0000 0110

    int a1 = 100;
    int a2 = 1122334;
    int a3 = 5566778;

    a1 = a1 ^ a2;
    a1 = a1 ^ a3;

    a1 = a1 ^ a3;
    a1 = a1 ^ a2;

    //反向異或 可以把數(shù)據(jù)還原 早起用作數(shù)據(jù)加密

    //按位取反:~   1變0  0變1
    
    ~c;

    //按位左移:  <<

    c = a << 2;
    //a 0000 0000   0000 0000   0011 0000   0011 1001
    //左移兩位 最高位會(huì)消失 會(huì)添加2個(gè) 0 到最后位
    //  00 - 00 0000    0000 0000   0011 0000   0011 1001 + 00
    //      0000 0000   0000 0000   1100 0000   1110 0100

    a = 100;

    c = a << 2; //左移1位相當(dāng)于 * 2 但是比乘法效率高很多

    //按位右移: >>

    c = a >> 2;
    //a 0000 0000   0000 0000   0011 0000   0011 1001
    //右移兩位 最低位會(huì)消失 會(huì)添加2個(gè) 符號(hào)位 到最后位
    //也就是說(shuō) 最高位 如果是1  那么添加的就是1
    //比如 10001100    最高位是1 右移后就是 11 + 100011 - 00
    //     11100011
    //如果是 00001100  最高位是0 則添加0即可
    //移動(dòng)后 00000011

    c = a >> 2; //右移相當(dāng)于 除 2

    system("pause");
}

自增自減運(yùn)算符:

#include <iostream>

//自增自減 運(yùn)算符

void main()
{
    //自增運(yùn)算符 ++
    //假設(shè)有一個(gè)變量 a  
    // ++a 相當(dāng)于  a = a + 1;
    //計(jì)算過(guò)后 a 的值 會(huì)增加1
    int a = 1;

    int b;
    
    //++a
    //++ 會(huì)先計(jì)算 然后 會(huì)把a(bǔ) 增加后的結(jié)果 返回出去
    // b得到的就是 增加后的結(jié)果 2
    b = ++a;

    a = 1;

    //a++
    //++在后面 就會(huì) 先返回a保存的值 1 b得到的就是 1
    //然后 計(jì)算++  a 增加 1 
    b = a++;
    
    //自減運(yùn)算符 --
    
    a = 1;

    //--a
    //-- 會(huì)先計(jì)算 然后 會(huì)把a(bǔ) 減少后的結(jié)果 返回出去
    // b得到的就是 減少后的結(jié)果 0
    b = --a;

    a = 1;

    //a--
    //--在后面 就會(huì) 先返回a保存的值 1 b得到的就是 1
    //然后 計(jì)算--  a 減少 1 
    b = a--;

    system("pause");
}
```  
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容