运算符

子淼
发布于 2024-01-30 / 57 阅读
0
0

运算符

1.算数运算符

算术运算符与我们在数学中学习的计算符号一样,主要用在数学表达式中

int a=5,b=3;

符号

功能

示例

+

计算两个数字的和

a+b 结果为8

-

前面的数减去后面的数

a-b 结果为2

*

计算两个数字的乘积

a*b 结果为15

/

前面的数除以后面的数的商

a/b 结果为1

%

前面的数除以后面的数的余数

a%b 结果为2

++

自增运算符,整数值增加 1

a++ 结果为a=6

--

自减运算符,整数值减少 1

a-- 结果为a=4

代码示例:

#include<iostream>
using namespace std;
int main(){
  int a=5,b=3;
  cout<<"a+b的值是:"<<a+b<<endl;
  cout<<"a-b的值是:"<<a-b<<endl;
  cout<<"a*b的值是:"<<a*b<<endl;
  cout<<"a/b的值是:"<<a/b<<endl;
  cout<<"a%b的值是:"<<a%b<<endl;
  return 0;
}

运行结果是:

a+b的值是:8
a-b的值是:2
a*b的值是:14
a/b的值是:1 
a%b的值是:2

自增运算详解:

自增运算分为前面自增(++a),和后面自增(a++)

++a 表示:先让a的值增加1,再使用a

a++ 表示:先使用a,再让a的值增加1

#include<iostream>
using namespace std;
int main(){
  int a=3;
  a++; //这行代码结束后a=4;
  cout << a << endl; //输出结果是4
  cout << a++ << endl;//输出结果是4
  cout << a << endl; //输出结果为5
  //在上面那一行代码中,我们要输出a的值(要用到a),而++运算在后面,所以就是先使用a的值4,然后a的值变为5
  cout << ++a << endl;//输出结果为6
  cout << a << endl; //输出结果为6
  return 0;
}

减法可以类比记忆

#include<iostream>
using namespace std;
int main(){
  int a=5;
  a--; //这行代码结束后a=4;
  cout << a << endl; //输出结果是4
  cout << a-- << endl;//输出结果是4,这一行结束后a=3
  cout << a << endl; //输出结果为3
  cout << --a << endl;//输出结果为2
  cout << a << endl; //输出结果为2
  return 0;
}

2.复合运算符

复合运算符是一种缩减的写法

符号

示例

等价于

+=

a+=b

a = a+b

-=

a-=b

a = a-b

*=

a*=b

a = a*b

/=

a/=b

a = a/b

%=

a%=b

a = a%b

3.关系运算符

关系运算符用于表达式之间的大小比较,关系运算符的结果为bool型,用0和1表示

大于

小于

大于等于

小于等于

等于

不等于

>

<

>=

<=

==

!=

3.1 关系运算符的优先级低于算术运算符

例如 3+5>2+4 先算 3+5 和 2+4,然后在比较大小

3.2 >,<,>=,<=的优先级相同,高于==和!=

例如 3<5==4>2 先算 3<5 和 4>2,然后再算 ==

4.逻辑运算符

对表达式或者变量做出逻辑判断的运算符

逻辑与

逻辑或

逻辑非

&&

||

4.1逻辑与(双目运算符)

a

1

1

0

0

b

1

0

1

0

a&&b的值

1

0

0

0

&& 只有两边都是真(1),结果才为真(1)

4.2逻辑或 (双目运算符)

a

1

1

0

0

b

1

0

1

0

a||b的值

1

1

1

0

|| 两边有1个是真(1),结果就是真(1)

4.3 逻辑非 (单目运算符)

a

1

0

!a的值

0

1

非真(1)即假(0),非假(0)即真(1)

4.4 逻辑运算符的优先级

逻辑非(!)> 逻辑与(&&)> 逻辑或(||)

例如:a || b && ! c 先计算!c,再计算b&&__,最后计算a|| __

5.位运算

位运算直接对整数在内存中的二进制位进行运算。

异或

左移

右移

&

|

~

^

<<

>>

5.1 与(&)

将参与运算的两个操作数各自对应的二进制位进行“逻辑与”操作,只有对应的两个二进制位均为1,对应二进制位的运算结果才是1,否则为0。

例如:12 & 5 -> 1100 & 0101 -> 0100 = 4

 

5.2 或(|)

将参与运算的两个操作数各自对应的二进制位进行“逻辑或”操作,只有对应的两个二进制位均为0,对应二进制位的运算结果才是0,否则为1。

例如:12 | 5 -> 1100 | 0101 -> 1101 = 13

 

5.3 非(~)

单目运算,将操作数中的二进制位0变成1,1变成0。

 

5.4 异或(^)

将参与运算的两个操作数各自对应的二进制位进行“异或”操作,当对应的两个二进制位不相同时,对应二进制位的运算结果是1,否则为0。相同为0,不同为1。

一个数字异或另一个数字两次,结果不变。

#include<iostream>
using namespace std;
int main(){
  int a=3,b=5;
  a=a^b;
  a=a^b;
  cout << a << endl; //结果为:3
  return 0;
}

交换两个变量的值

#include<iostream>
using namespace std;
int main(){
  int a=3,b=5;
  a=a^b;
  b=a^b;
  a=a^b;
  cout << a << " " << b << endl; //结果为:5 3
  return 0;
}

 

5.5 左移(<<)

单目运算,将操作数对应的二进制向左移动若干位。左移时,高位丢弃,右边低位补0。左移n位就相当于乘2的n次方。

 

5.6 右移(>>)

单目运算,右移运算的操作方式和左移运算类似,不同的是移动方向,移出最右边的位被丢弃。同样,右移n 位相当于左操作数除以 2的n次方,并且将结果向下取整。对于无符号数,右移时高位总是补 0。对于有符号数,在右移时,符号位(即最高位)一起移动。如果原符号位为 1(代表负数),则右移时右边高位都补 1:如果原符号位为 0(代表正数),则右移时高位补 0,即保持原有的正负。


评论