超详细的操作符讲解

操作符的分类

算术操作符
移位操作符
位操作符
赋值操作符
单目操作符
关系操作符
逻辑操作符
条件操作符
逗号表达式
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

000000113000001015000000013&5

3|5

000000113000001015000001113|5

3^5

000000113000001015000001103^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
  • 44
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 47
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 47
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值