操作符的分类 算术操作符
移位操作符
位操作符
赋值操作符
单目操作符
关系操作符
逻辑操作符
条件操作符
逗号表达式
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-ba-=b;
*=a=a*ba*=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
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
推荐阅读
- 原码、反码和补码,这些你都知道吗()
- 初识C语言(下)
- 初识c语言(上)
- C语言数组
- C语言指针(初阶)
- 单片机|STM32项目设计(基于STM32的DHT11、MQ-2、光照强度检测)
- proteus|基于51单片机计算器设计
- 单片机|基于51单片机HX711的电子秤称重计价proteus仿真程序设计
- 《C语言程序设计》(谭浩强第五版) 第5章 循环结构程序设计 习题解析与答案