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");
}
```  
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 206,214评论 6 481
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 88,307评论 2 382
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 152,543评论 0 341
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 55,221评论 1 279
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 64,224评论 5 371
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,007评论 1 284
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,313评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,956评论 0 259
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,441评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,925评论 2 323
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,018评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,685评论 4 322
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,234评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,240评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,464评论 1 261
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,467评论 2 352
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,762评论 2 345