运算符是一种告诉编译器执行特定的数学或逻辑操作的符号
一般地,运算符有六种:
- 算术运算符
- 逻辑运算符
- 赋值运算符
- 关系运算符
- 位运算符
- 其他运算符
这一章我们来看位运算符和其他运算符
位运算符
位是用以描述电脑数据量的最小单位。二进制系统中,每个0或1就是一个位。
位运算符作用于位,将运算对象按二进制的方式操作,完成指定运算。
位运算符一般用于处理二进制位的问题,且只能用于操作整型数。
1)按位取反 ' ~ '
按位取反运算符 ~,又称补码运算符。
取反,顾名思义,类似反转的效果,如二进制上的位如果是 0,则取反后为1,而位上是1的取反后为0。
比如:
如果 A = 00010001
那么~A = 11101110
2)按位与 ' & '
规则:如果相应的二进制位都为1,则该位的结果就为1,否则为0(类似逻辑" 与 ")
比如:
A = 1010 |
B = 1100 |
A&B = 1000 |
3)按位或 ' | '
规则:如果相应的二进制位有一个为1,则该位的结果就为1(类似逻辑" 或 ")
比如
A = 1010 |
B = 1100 |
A | B = 1110 |
4)按位异或 ' ^ '
规则:如果相应的二进制位不同,则该位的数字就为1(即两位相同则为0)
比如:
A = 1010 |
B = 1100 |
A ^ B = 0110 |
5)左移' << '
规则:将二进制码向左移动若干位,后面补0。(相当于乘以2)
比如:
A = 0011 |
A << 1= 0110 |
6)右移' >> '
规则:将二进制码向右移动若干位,前面补0。(相当于除以2)
比如:
A = 0011 |
A >> 1= 0001 |
其他运算符
符号 |
含义 |
作用 |
---|---|---|
? : |
条件运算符 |
可代替简单if-else语句 |
, | 逗号运算符 |
为了把几个表达式放在一起 |
. 和 -> |
成员运算符 |
用于引用类、结构和共用体的成员 |
& 和 * |
指针运算符 |
前者返回地址,后者指向一个变量 |
1)条件运算符
int value;
if (test > 1)
{
value = 5;
}
else
{
value = -5;
}
上述代码可化为下列代码:
int value=(test>1) ? 5 :-5;
条件运算符属于三目运算符(或叫三元运算符),因为它需要三个操作数。
A ? B : C
若表达式A为真,则整条表达式的值为B
若表达式A为假,则整条表达式的值为C
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被丢弃(或者说被覆盖了)
3)成员运算符
成员运算符包括点运算符" . "和箭头运算符"->"
成员运算符用于访问结构体,类和共同体的成员
点运算符可直接应用于对象
箭头运算符可与指向对象的指针一起使用
比如,现在有一个结构体
struct people
{
char name[10];
int age;
}man;
将值"yiyi"赋给对象man的name成员
可以这么做:
strcpy(man.name,"yi");
若p_man是一个指针,指向类型为people的对象,则:
strcpy(p_man->name,"yi");
4)指针运算符
1、&指针运算符可返回变量的内存地址。
例如:
int i = 1;
cout << &i;
输出结果为一个地址:
0x6ffe1c
2、 *指针运算符返回操作数所指定地址的变量的值
例如:
输出结果为:
a = 20
p_a = 012FFC10
b = 20
在最后,我们来梳理一遍