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

    

posted @ 2021-09-25 16:00  RandoMNamE0  阅读(288)  评论(0编辑  收藏  举报