运算符是一种告诉编译器执行特定的数学或逻辑操作的符号
一般地,运算符有六种:
- 算术运算符
- 逻辑运算符
- 赋值运算符
- 关系运算符
- 位运算符
- 其他运算符
1.算术运算符
| 算术运算符 | 含义 |
|---|---|
| + | 两个数相加 |
| - | 两个数相减 |
| * | 两个数相乘 |
| / | 两个数相除 |
| % | 两个数相除,取余数 |
| ++ | 整数值增加 1 |
| -- | 整数值减少 1 |
实例如下:
#include <iostream>
using namespace std;
int main ()
{
int i = 21, j = 5; //定义变量 i与 j,并初始化
int result ; //定义一个变量存放结果
cout<<"i=21, j=5\n算术结果如下:"<<endl;
result = i + j;
cout <<"i + j = "<<result<<endl;
result = i - j;
cout <<"i - j = "<<result<<endl;
result = i * j;
cout <<"i * j = "<<result<<endl;
result = i / j;
cout<<"i / j = "<<result<<endl;
result =i % j;
cout<<"i % j = "<<result<<endl;
result = ++i;
cout<<"++i = "<<result<<endl;
result = --j;
cout<<"--j = "<<result<<endl;
return 0;
}
运行结果如下:
i=21, j=5
算术结果如下:
i + j = 26
i - j = 16
i * j = 105
i / j = 4
i % j = 1
++i = 22
--j = 4
注意:
- 在除法运算中,一个整数除以另一个整数,结果为商的整数部分(小数部分被舍弃,比如 9 / 5 = 1),但如果操作数中有一个是浮点数(或两个都是),则除法结果是浮点数(小数部分被保留)。
- 在取余运算中,即使用求模运算符 % 时,只能用于整数(浮点数无效)
2.逻辑运算符
逻辑运算符可以将多个表达式连接起来,从左到右,具有关联性。
- 其逻辑表达式的结果为布尔值(真或假)
- 真(true)用 1 表示,假(false)用 0 表示
逻辑运算符有三种:
| 符号 | 含义 | 作用 |
|---|---|---|
| && | 与 | 都为真才真 |
| || | 或 | 有真就为真 |
| ! | 非 | 真变假,假变真 |
2.1.逻辑与(&&)
&&运算符将多条表达式连接起来时,当表达式全为真时,该结果才为真(否则为假)
语法:
if ( (表达式一) && (表达式二) )
.
.
.
| 两条表达式的情况 | 整体表达式的值 |
|---|---|
| false && false | 0(false) |
| false && true | 0(false) |
| true && false | 0(false) |
| true && true | 1(true) |
注意:
使用&&运算符时,存在短路情况, 即系统在编译时从左到右进行排查,只要有一个表达式为false,则整条式子就为false,无需排查剩下的表达式。
2.2.逻辑或(||)
||运算符将多条表达式连接起来时,只要有一条表达式为真,那么整条表达式就为真。
语法:
if ( (表达式一) && (表达式二) )
.
.
.
| 两条表达式的情况 | 整体表达式的值 |
|---|---|
| false && false | 0(false) |
| false && true | 1(true) |
| true && false | 1(true) |
| true && true | 1(true) |
注意:
使用逻辑 || 运算符时也存在短路情况, 即当有一条表达式为true,那么整条表达式就为真,无需排查剩余的表达式。
2.3.逻辑非(!)
逻辑 !运算符实现逻辑非操作,也就是反转一个操作数的真或假。
语法:
if ( ! (表达式) )
{
.
.
.
}
上述中的表达式若是真,使用 !运算符 后就返回假, if 语句将不会执行。 反之,表达式若为假,则 !运算符 就返回真,程序将执行 if 语句
3.赋值运算符
符号“=”就是赋值运算符。
- " = "的作用是将一个数据赋给一个变量。
- 如“a=3”的作用是把常量3赋给变量a。
- 我们也可以将一个表达式的值赋给一个变量。
- 我们在赋值符“=”之前加上其他运算符,就可以构成复合赋值运算符。
看下表:
| 符号 | 实例 |
|---|---|
| = | A = 3;就是一个简单的赋值操作 |
| += | B+=A;就等同于B=B+A; |
| -= | B-=A;就等同于B=B-A; |
| *= | B*=A;就等同于B=B*A; |
| /= | B/=A;就等同于B=B/A; |
| %= | B%=A;就等同于B=B%A; |
| &= | B&=A;就等同于B=B&A; |
| ^= | B^=A;就等同于B=B^A; |
| |= | B|A;就等同于B=B|A; |
| <<= | B<<=A;就等同于B=B<<A; |
| >>= | B>>=A;就等同于B=B>>A; |
4.关系运算符
关系运算符用来确定两个值之间是否存在特定的关系。
C++中的关系运算符有六种:
| 符号 | 含义(是否) |
|---|---|
| 大于 | |
| < | 小于 |
| == | 等于 |
| != | 不等于 |
| >= | 大于或等于 |
| <= | 小于或等于 |
- 使用关系运算符的表达式称为关系表达式
- 其值为 true(1) 或 false(0) 。
- 比如,如果 x=2,y=1,那么表达式 x>y 的值将为 true,表达式 x<y 的值则为 false。
- 实际上,关系运算符在测试一对关系,是否等于(==),是否不等于(!=)
5.位运算符
- 位是用以描述电脑数据量的最小单位。二进制系统中,每个0或1就是一个位。
- 位运算符作用于位,将运算对象按二进制的方式操作,完成指定运算。
- 位运算符一般用于处理二进制位的问题,且只能用于操作整型数。
5.1.按位取反' ~ '
按位取反运算符 ~,又称补码运算符。
取反,顾名思义,类似反转的效果,如二进制上的位如果是 0,则取反后为1,而位上是1的取反后为0。
比如:
- A = 00010001
- ~A = 11101110
5.2.按位与' & '
规则:
如果相应的二进制位都为1,则该位的结果就为1,否则为0(类似逻辑"与")
比如:
- A = 1010
- B = 1100
- A&B = 1000
5.3.按位或' | '
规则:
如果相应的二进制位有一个为1,则该位的结果就为1(类似逻辑" 或 ")
比如:
- A = 1010
- B = 1100
- A|B = 1110
5.4.按位异或' ^ '
规则:
如果对应的二进制位不同,则该位的数字就为1(两位相同则为0)
比如:
- A = 1010
- B = 1100
- A^B = 0110
5.5.左移' << '
规则:
将二进制码向左移动若干位,后面补0。 (相当于乘以2)
比如:
- A = 0011
- A<<1= 0110
5.6.右移' >> '
规则:
将二进制码向右移动若干位,前面补0。 (相当于除以2)
比如:
- A = 0011
- A>>1= 0001
6.其他运算符
- 条件运算符( ? : )
- 逗号运算符( , )
- 成员运算符( . 或 ->)
- 指针运算符( & 或 *)
6.1.条件运算符
条件运算符是一个三目运算符,即操作数有三个。
A ? B : C
- 若表达式A为真,则整条表达式的值为B
- 若表达式A为假,则整条表达式的值为C
条件运算符可以替代简单的if-else语句。
比如:
int value = (test>1) ? 5 :-5;上述条件运算符的运用相当于下述代码:
int value; if (test > 1) { value = 5; } else { value = -5; }
6.2.逗号运算符
整条逗号表达式的值为最后一条表达式的值。
我们使用逗号让一系列运算按顺序执行:
int main () { int a,b; a = 5;//初始化a b = (a+10,a+5);//初始化b cout<<"a = " <<a <<",b = " <<b; return 0; }输出结果为:
a = 5,b = 10
我们由结果可知,最右边的表达式将作为整条逗号表达式的值,其他表达式的值会被丢弃。
如上述代码中,只有a+5有效,而a+10被丢弃(或者说被覆盖了)
6.3.成员运算符
成员运算符包括点运算符'.'和箭头运算符'->'
- 成员运算符是用于访问结构体,类和共同体的成员的运算符
- 点运算符直接应用于对象
- 箭头运算符与指向对象的指针一起使用
比如:
这是一个结构体
struct people { char name[10]; int age; }man;我们要将值"yiyi"赋给对象man的name成员
- 可以这么做:
strcpy(man.name,"yi");
- 也可以这样:
//p_man是一个指针,指向类型为people的对象 strcpy(p_man->name,"yi");
6.4.指针运算符
指针运算符有两种:&和*
- &指针运算符可以返回变量的地址 比如:
int i = 1; cout << &i;输出为:
0x6ffe1c
- *指针运算符可以返回指针所指向的地址(内存)里的值 比如:
int main() { int a,b; int* p_a; a = 20; p_a = &a; b = *p_a; cout<<"a="<<a<<'\n' <<"p_a="<<p_a<<'\n' <<"b="<<b; return 0; }运行结果为:
a=20 p_a=012FFC10 b=20
对自增和自减运算符的一些补充
自增运算符 ++ 会把操作数加 1
自减运算符 -- 会把操作数减 1
a++;//等同于a=a+1;
b--;//等同于b=b-1;
- 需要注意的是,++(--)可以放在变量的左边或右边。而这两种形式有着很大的区别。
如下所示:
输出结果为:
a=5,b=5 a++: 5 ++b: 6
很显然,区别在于:
-
后缀(a++):先完成操作再自增
-
前缀(++a):先自增再完成操作
好了,运算符的复习就到这,喜欢的朋友点个赞呗。