zoukankan      html  css  js  c++  java
  • 2021/9/25 基本运算符(C++)

        基本运算符(C++)

    一、赋值运算符

      1、基本赋值运算符

        =

        将 “ = ” 右边 值 / 表达式值 赋予左边变量。

      2、复合赋值运算符

        +=、-=、/=、*=、%=、<<=、>>=、&=、^=、|=

        将运算符左边变量与右边 值 / 表达式值 进行相应运算后再将结果赋给左边变量。

        例:a += 3  <==> a = a + 3

          a %= 3 <==> a = a % 3

      p.s. 常量与表达式一般不能作为运算符左边值(如 3 = a、3 += a不合法)。

    二、算术运算符

      顾名思义,算数运算符是完成基本算术运算所必须的符号。C++中提供了以下几种算术运算符:

    运算符 描述 实例 (“=”后为结果)
    + 对操作数执行加法运算 4 + 2 = 6
    - 从第一个操作数中减去第二个操作数 4 - 2 = 2
    * 将操作数相乘  4 * 2 = 8
    /

    用第一个操作数除以第二个操作数(精度可能丢失)

    8 / 2 = 4 ( 8 / 3 = 2  p.s. 小数部分被丢弃)
    %

    求模(生成第一个操作数除以第二个操作数的余数(操作数需为整数,浮点数会CE))

    若一个操作数为负数,则满足 a % b = a - ( a / b ) * b (实例详见P1017题解)

    8 % 3 = 2

    17 % ( - 10 ) = 7

      p.s. 不同类型操作数进行运算时可能因类型强制转换造成精度丢失。

      此外,还有递增、递减运算符。

    运算符(示例) 含义
    a++ (后缀版本) 使用当前值计算表达式,然后使a加1
     ++a (前缀版本) 先使a加1,然后使用新值计算表达式
     a-- 同a++ ,最终使a减1
     --a 同++a ,先使a减1

      p.s.不要在同一条语句中对同一个变量多次递增/递减,同一条语句可能因此在不同系统不同环境上产生不同结果。

    三、关系运算符

      关系运算符用于对值进行比较。对于所有的关系表达式,如果比较结果为真,则表达式值为true(1),否则为false(0)。

    操作符 含义
    < 小于
    > 大于
    <= 小于等于
    >= 大于等于
    == 相等
    != 不等

      p.s.请勿混淆关系运算符 “ == ” 与赋值运算符 “ = ” ,如使用错误编译不会报错,这是新手主要的bug来源。错误防范:将表达式 a == 3 写为 3 == a ,如此一来混淆时编译会报错( 3 = a 不合法)。

    四、逻辑运算符

        c++中提供4种逻辑运算符来组合、修改已有表达式从而判断表达式是否为真。

       1、逻辑OR运算符:||    or

        如果两侧表达式中任意一个或全部为true时,则得到的表达式的值为true。由于||的优先级较低,所以不需要对左右两侧表达式使用括号。

      表达式1:true 表达式1:false
    表达式2:true 结果:true 结果:true
    表达式2:false 结果:true 结果:false

       p.s. “ 假假或假 ” 只有 false || false 值为 false

      2、逻辑AND运算符: &&   and

        仅当两侧表达式全部为true时,得到的表达式的值才为true。由于&&的优先级较低,所以不需要对左右两侧表达式使用括号。

      表达式1:true 表达式1:false
    表达式2:true 结果:true 结果:false
    表达式2:false 结果:false 结果:false

       p.s. “ 真真与真 ” 只有 true && true 值为 true

      3、逻辑NOT运算符:!  not

        !运算符将它后面的表达式真值取反。

    表达式 结果
    true false
    false true

      4、其他细节

        1、 && 与 || 运算符优先级低于关系运算符

        2、 && 运算符优先级高于 || 运算符

        3、可使用( )来提高逻辑运算符优先级

        4、C++中支持直接使用and、or、not作为运算符使用。C中则需要包含头文件iso646.h

    五、位运算符

      1、逻辑按位运算符 

        1、按位与AND:&    bitand

          按每一个二进制位对两数进行与运算。

        2、按位或OR:|   bitor

          按每一个二进制位对两数进行或运算。

        3、按位异或XOR:^   xor

          按每一个二进制位对两数进行异或运算。若两值对应位都为0或1,则结果对应位为0。若两值对应位只有一个为1,则结果对应位为1。

      b1=1 b1=0
    b2=1 0 1
    b2=0 1 0

        4、按位非:!   compl  

          按每一个二进制位对一个数进行非运算。将每一位的0转换为1,将1转换为0。

      2、移位运算符

        1、左移运算符:<<

          左移运算符将一数全部二进制位左移,新腾出的位用0补全。

          e.g.   (dec) 5  ==> (bin) 101

              (dec) 5 << 1 ==> (bin) 101X(新腾出一位)  ==> (bin) 1010(自动补0)==> (dec) 10

          p.s. <<运算符在某种意义上等同于操作 “ a*=2 ” 。由于位运算速度优于乘法运算,有时可以用于某些程序的优化(线段树)。

        2.右移运算符:>>

          右移运算符将一数全部二进制位右移,超出边界的位直接丢弃。

          e.g.   (dec) 5 ==> (bin) 101

              (dec) 5 >>1 ==> (bin) 10|1 (一位超出边界)==> (bin) 10 (超出边界丢弃) ==> (dec) 2

          p.s. >>运算符在某种意义上等同于操作 “ a/=2 ” 。

        注意:左移与右移运算符和输入输出中的 << 操作符、>> 操作符不同。

    六、条件运算符(三目运算符)

        条件运算符 ? : 常被用来代替if else 语句

        语法: exp1 ? exp2 : exp3

        如果exp1值为真,则整个表达式的值为 exp2 ,若exp1值为假,则整个表达式的值为 exp3 。

    七、逗号运算符

       逗号运算符用于连接两个表达式,允许将连接后的两表达式放到C++语法只允许放一个表达式的地方

       e.g. ++ j ,  ++ i ;  <==>  ++ j ; ++ i ;

        注意:逗号不总是逗号运算符。如   int  i , j ;   中 “ ," 用于分隔两个声明的变量,不起逗号运算符的作用。                

    八、其他运算符

      1、sizeof运算符

        sizeof是一个用来获取数据类型、变量的字节大小

        e.g.   x = sizeof (int) ;  ==> x = 4

          int x , y ;

          y = sizeof x ;   ==> y = 4 

        p.s. sizeof运算符不能求得void类型字节大小(编译错误)。若对表达式求sizeof,则返回表达式结果类型的字节大小而不计算表达式,函数同理。

      2、成员运算符: .  与  ->

        成员运算符:.  用于访问左侧结构体中的右侧元素。

        成员运算符:->用于访问左侧指针所指向的结构体中的右侧元素。

      3、强制转换运算符: ()

        强制转换运算符可以将括号后变量的类型强制转换为括号内的类型

        e.g.   char c = “ a ” ;  此时( int ) c = 97

      4、指针运算符:取地址运算符 &

        不同与按位与,指针运算符:&  返回位于其后的变量的地址。

      5、指针运算符:间接寻址运算符 *

        间接寻址运算符是取地址运算符的补充,* 返回位于以其后变量为地址的变量值;

        e.g.  int x = 1 ; int y = &x ; int p = *y ; ==> p = 1

      6、下标运算符:[  ] 

        下标运算符允许操作者访问数组中某一单独元素。

        e.g.   int a[3] = { 0 , 1 , 2 } ; ==> a[0] = 0 , a[1] = 1 , a[2] = 2 

      7、命名空间限定符:  ::

        命名空间限定符用于限定命名空间。

        e.g.   

    #include<iostream>
    using namespace std;
    int main()
    {
         cout<<"hello world"<<endl;
         return 0;                 
    }
    //也可写成:
    #include<iostream>
    int main()
    {
         std::cout<<"hello world"<<endl;
         return 0;
    }

    附:运算符优先级:

     

          

     2021/9/25上大学第一次写博客XD

        

  • 相关阅读:
    echarts 柱状图
    echarts 双y轴渐变色进度条
    echarts 折线图
    算法系列一:本质以及特征
    导致薪水低的九大行为表现
    Tomcat使用shutdown.sh无法关闭
    定时将上月的数据导入到Oracle中,并更新指定的列
    定时抛转数据 crontab
    微服务主要模块
    tk.mybatis 调用oracle,生成ID
  • 原文地址:https://www.cnblogs.com/randomaddress/p/15334163.html
Copyright © 2011-2022 走看看