概述
操作符的分类
算术操作符
移位操作符
位操作符
赋值操作符
单目操作符
关系操作符
逻辑操作符
条件操作符
逗号表达式
1.算术操作符
+ - * / %
(1) % 是取余字符,即求余数,两个操作数必须为整数,返回的是整除之后的余数。如
(10除以3,商3余1)
10/3=1;
10%3=1;
除了 % 操作符之外,其他的几个操作符可以作用于整数和浮点数。 对于 / 操作符如果两个操作数都为整数,执行整数除法。而只要有浮点数执行的就是浮点数除法。
2.位移操作符(进行运算的都是补码)
<< 左移操作符
>> 右移操作符
注:移位操作符的操作数必须是整数,移动位数只能是正整数(不能为负数)。
如 3<<12(表示3左移12位)
3>>12(表示3右移12位)
(1)左移(左边删掉,右边补0)
3的补码(反码,补码都一样)
00000000000000000000000000000011
3<<12(左移12位)
00000000000000000011000000000000
-3的原码
10000000000000000000000000000011
-3的反码(原码符号位不变,其余取反)
11111111111111111111111111111100
-3的补码(反码+1)
11111111111111111111111111111101
-3<<12(-3左移12位)(补码)
11111111111111111101000000000000
转化成反码(即-1)
11111111111111111100111111111111
转换成原码(符号位不变,其余为取反)
10000000000000000011000000000000
原码即为最终结果
(2)右移
(2).1逻辑右移(左边补0,右边多出来的丢掉)
如 15>>3
15的原码(反码、补码都一样)
000000000000000000000000000001111
15>>3
00000000000000000000000000001000
如-15>>3
-15的原码
10000000000000000000000000001111
-15的反码
11111111111111111111111111110000
-15的补码
11111111111111111111111111110001
-15>>3
00011111111111111111111111111110
(2).2算术右移(左边补最高位,右边丢弃)
如 8>>3
8的原码
00000000000000000000000000001000
8>>3
00000000000000000000000000000001
如-16>>3
-16的原码
10000000000000000000000000010000
-16的反码
11111111111111111111111111101111
-16的补码
11111111111111111111111111110000
-16>>3
11111111111111111111111111111110
3.位操作符(进行运算的都是补码)
& 按位与(两个都是1则结果为1,否则为0)
| 按位或(至少有一个1则结果为1)
^ 按位异或(相同为0,不同为1)
注:他们的操作数必须是整数。
以8位二进制为例
3&5
00000011 (3)
00000101 (5)
00000001 (3&5)
3|5
00000011 (3)
00000101 (5)
00000111 (3|5)
3^5
00000011 (3)
00000101 (5)
00000110 (3^5)
4.赋值操作符(=)
int a = 10;
int x = 0;
int y = 20; a = x = y+1;//连续赋值
复合赋值符
+= 如a=a+b 可以写成 a+=b
-= a=a-b a-=b;
*= a=a*b a*=b;
/= ... ...
%= ... ...
>>=
<<=
&=
|=
^=
这些运算符道理都一样
5.单目操作符
! 逻辑反操作
- 负值
+ 正值
& 取地址
sizeof 操作数的类型长度(以字节为单位)
~ 对一个数的二进制按位取反
-- 前置、后置--
++ 前置、后置++
* 间接访问操作符(解引用操作符) (类型) 强制类型转换
! 逻辑反操作
0变非0,非0变0
例如 a=3,b=0;
则 !a=0,!b=1(或其他非0数)
前置++和前置- -(先++或- -,再运算)
int main()
{
int a = 10;
int x = ++a;
//先对a进行自增,然后对使用a,也就是表达式的值是a自增之后的值。x为11。
int y = --a;
//先对a进行自减,然后对使用a,也就是表达式的值是a自减之后的值。y为10;
return 0;
}
后置++和后置- -(先运算再++或- -)
#include <stdio.h>
int main()
{
int a = 10;
int x = a++;
//先对a先使用,再增加,这样x的值是10;之后a变成11;
int y = a--;
//先对a先使用,再自减,这样y的值是11;之后a变成10;
return 0;
}
6.关系操作符
>
>=
<
<=
!= 用于测试“不相等”
== 用于测试“相等”
7.逻辑操作符
&& 逻辑与
|| 逻辑或
&& 逻辑与: 将两个表达式连接成一个。两个表达式必须都为 true,整个表达式才为 true
如
1&&3 --->1
1&&0 --->0
|| 逻辑或
将两个表达式连接成一个。必须有一个或两个表达式为 true,才能使整个表达式为 true。只要其中有一个为 true,那么另外一个就变得无关紧要
如
1||1 -->1
1||0 -->1
8.条件操作符
exp1 ? exp2 : exp3
如求两个数中最大值
if(a>b)
return a;
else
return b;
换成条件表达式
(a>b)?a:b
//判断(a>b)是否成立,如果成立返回a的值,否则返回b的值
9.逗号表达式
exp1, exp2, exp3, …expN
逗号表达式,就是用逗号隔开的多个表达式。
逗号表达式,从左向右依次执行。整个表达式的结果是最后一个表达式的结果。
int a = 1;
int b = 2;
int c=(a=a*b, a=b+10, a, b=a+1);
a=1*2=2, a=2+10=12,12,b=12+1=13
所以结果为13
最后
以上就是灵巧大炮为你收集整理的超详细的操作符讲解的全部内容,希望文章能够帮你解决超详细的操作符讲解所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复