C++基础学习笔记5 - 运算符

运算符?加、减、乘、除?

简单的说:C++ 运算符只有:条件运算符、关系运算符、逻辑运算符、数学运算符、位运算符、自增自减运算符、赋值 与 自赋值运算符

我们先看赋值运算符:

#include <iostream>

//自赋值运算符

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");
}

条件运算符:

#include <iostream>

//条件运算符  ? :

/*
    假设 有表达式 A B C  组成条件表达式  A ? B : C;

    条件运算符的嵌套

    A ? B : C;  B 或者 C 部分 可以再写成 条件表达式

    A ? (A?B:C) : C;            A ? B : (A?B:C);
    A ? (A?B:C) : (A?B:C);
    
    其执行顺序为:
    1)执行A 判断 A的结果 为真 还是 假
    2)如果为真 执行 B语句  A C 等同于没有  只剩下  B;
    3) 如果为假 执行 C语句  A B 等同于没有  只剩下  C;

    主语 B  C 语句 必须是同类型
    比如 如果 B 有返回值 是表达式 那么 C 必须一样
    如果 B 是无返回值的 代码语句 C 也必须一样

    std::cout 就没有返回值    1 + 1 这个表达式 就有返回值
*/

void main()
{
    int a, b;

    a = 10;
    b = 20;

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

    //此处为真 那么 A C 部分 等于没有  
    //整个语句相当于  int c = a + 10;
    //所以 是 可以执行的 没有语句错误
    int c =  a < b ? a + 10 : b - 10;

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

    system("pause");
}

关系运算符:

#include <iostream>

//关系运算符

//关系运算符的结果 是 bool

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

void main()
{
    int a, b;

    bool c;

    //相等判断运算符 ==        A == B;

    //会判断  == 该符号 左右 两边的结果 是否相等
    //如果相等 整个表达式 为 真  否则 为假

    a = 1;
    b = 2;

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

    //不相等 判断运算符  !=     A != B
    //判断不相等  只要 A 和 B 不相等 那么 A != B 为真
    // A B 相等  A != B 为假

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

    //大于判断运算符 >  A > B
    
    //a 值为 1  b 值为 2  a 小于 b 所以  a > b 为假
    c = (a > b);

    //小于判断运算符 <     A < B
    
    //a 值为 1  b 值为 2  a 小于 b 所以  a < b 为真
    c = (a < b);

    //大于等于判断运算符 >=      A >= B
    //只要 满足 大于 或者 等于 其中一个条件  就为真
    
    //a 值为 1  b 值为 2  a 小于 b 所以  a >= b 为假
    c = (a >= b);


    //小于等于判断运算符 <=      A <= B
    //只要 满足 小于 或者 等于 其中一个条件  就为真
    
    //a 值为 1  b 值为 2  a 小于 b 所以  a <= b 为真
    c = (a <= b);

    system("pause");
}

逻辑运算符:

#include <iostream>

//逻辑运算符

void main()
{
    //逻辑 与 运算符 &&
    /*
        假设有表达式 A、B 组成的逻辑表达式 A&&B
        
        该表达式会返回一个bool 结果
        表达式会先 得到 A 的结果 并判断真 假
        如果A 为 真   就继续判断 B的 真 假
        如果B 为 真 那么整个表达式(A&&B) 返回 真
        简单说:
        A为真  B为真  表达式 为真
        A为真  B为假  表达式 为假
        A为假  B将不计算  表达式为 假
    */

    int a;
    int b;

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

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

    //逻辑 或 运算符 ||
    /*
        假设有表达式 A、B 组成的逻辑表达式 A||B
        
        该表达式会返回一个bool 结果
        表达式会先 得到 A 的结果 并判断真 假
        如果A B 有一个 为真 那么 表达式 返回真
        如果A B 都为假 表达式 返回 假
        简单说:
        A为真  B将不计算 表达式 为真
        A为假  B为真  表达式 为真
        A为假  B为假  表达式 为假
    */

    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; //结果为假
    !b; //结果为真
    
    system("pause");
}

数学运算符:

#include <iostream>

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

void main()
{
    int a = 10;

    int b = 20;

    int c = 30;

    //和原来学习的数学计算方式一样 
    //先 乘除 后 加减  优先计算括号内的
    int d = a + b * c;

    //除法稍有不同 (因为参与计算的变量类型)
    //这里10 / 4 的结果 应该是 2.5
    //但是 由于 10 是 int 类型的常量 4 也是 int 类型
    //的 常量 所以  int / int 结果 也是一个 int
    //所以 这里 10 / 4的结果是 2 小数部分 不做保留
    d = 10 / 4;

    //取余 整数的除法 我们可以看成两个部分  商 和 余
    //比如 15 除以 6 得到的结果就是 2 和 3
    //那么 用除号 / 得到的就是 商  2
    //     用取余 % 得到的就是 余数3

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

    system("pause");
}

位运算符:

#include <iostream>

//位运算符

/*
    位运算符的处理 是在二进制位的层面上进行处理的
    位的操作是非常快。
*/

void main()
{
    int a = 12345;
    int b = 67891;
    int c;
    char d; 
    //按位与  &        二进制位 同为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


    //按位或 | : 二进制位 同为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;

    //反向异或 可以把数据还原 早起用作数据加密

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

    //按位左移:  <<

    c = a << 2;
    //a 0000 0000   0000 0000   0011 0000   0011 1001
    //左移两位 最高位会消失 会添加2个 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位相当于 * 2 但是比乘法效率高很多

    //按位右移: >>

    c = a >> 2;
    //a 0000 0000   0000 0000   0011 0000   0011 1001
    //右移两位 最低位会消失 会添加2个 符号位 到最后位
    //也就是说 最高位 如果是1  那么添加的就是1
    //比如 10001100    最高位是1 右移后就是 11 + 100011 - 00
    //     11100011
    //如果是 00001100  最高位是0 则添加0即可
    //移动后 00000011

    c = a >> 2; //右移相当于 除 2

    system("pause");
}

自增自减运算符:

#include <iostream>

//自增自减 运算符

void main()
{
    //自增运算符 ++
    //假设有一个变量 a  
    // ++a 相当于  a = a + 1;
    //计算过后 a 的值 会增加1
    int a = 1;

    int b;
    
    //++a
    //++ 会先计算 然后 会把a 增加后的结果 返回出去
    // b得到的就是 增加后的结果 2
    b = ++a;

    a = 1;

    //a++
    //++在后面 就会 先返回a保存的值 1 b得到的就是 1
    //然后 计算++  a 增加 1 
    b = a++;
    
    //自减运算符 --
    
    a = 1;

    //--a
    //-- 会先计算 然后 会把a 减少后的结果 返回出去
    // b得到的就是 减少后的结果 0
    b = --a;

    a = 1;

    //a--
    //--在后面 就会 先返回a保存的值 1 b得到的就是 1
    //然后 计算--  a 减少 1 
    b = a--;

    system("pause");
}
```  
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

友情链接更多精彩内容