操作符分类及运用

操作符的分类

按用途分类

算术操作符

+  -  *  \  %
  • 除了 % 操作符之外,其他的几个操作符可以作用于整数和浮点数
  • 对于 / 操作符如果两个操作数都为整数,执行整数除法。而只要有浮点数执行的就是浮点数除法
  • % 操作符的两个操作数必须为整数。返回的是整除之后的余数

移位操作符

<< 左移操作符
>> 右移操作符
  • 左移操作符 移位规则:
    左边抛弃、右边补0

  • 右移操作符 移位规则:
    首先右移运算分两种:

    1. 逻辑移位 左边用0填充,右边丢弃
    2. 算术移位 左边用原该值的符号位填充,右边丢弃
  • 对于移位运算符,不要移动负数位,这个是标准未定义的

位操作符

位操作符有:

&   按位与
|   按位或
^   按位异或

注:他们的操作数必须是整数

赋值操作符

赋值符

=

复合赋值符

+=   -=   *=   /=   %=
>>=  <<=  &=   |=   ^=

这些运算符都可以写成复合的效果

关系操作符

关系操作符

>
>=
<
<=
!=      
==      

注意:在编程的过程中== 和=不小心写错,易导致错误

逻辑操作符

&&    逻辑与 
||    逻辑或

条件操作符

exp1 ? exp2 : exp3

逗号操作符

exp1 , exp2 , exp3

逗号操作符,就是用逗号隔开的多个表达式。 逗号表达式,从左向右依次执行。整个表达式的结果是最后一个表达式的结果

下标引用、函数调用和结构成员

[ ] 下标引用操作符
操作数:一个数组名 + 一个索引值
( ) 函数调用操作符
接受一个或者多个操作数:第一个操作数是函数名,剩余的操作数就是传递给函数的参数

按操作变量数目分类

按照参与运算的变量数目,可把操作符分为单目、双目、三目运算符。

单目操作符

!           逻辑反操作
-           负值
+           正值
&           取地址
sizeof      操作数的类型长度(以字节为单位)
~           对一个数的二进制按位取反
--          前置、后置--
++          前置、后置++
*           间接访问操作符(解引用操作符)
(类型)       强制类型转换

双目操作符

双目操作符即对两个变量进行操作

算术操作符   +  -  *  \  %
关系运算符   <  <=  >  >=  ==  !=
位操作符     &  ^  |
逻辑操作符   && ||  
赋值运算符   =  +=  -=  *=  /=  %=  &=  ^=  |=  <<= >>=   
逗号运算符   , 

三目操作符

 exp1 ? exp2 : exp3  (条件操作符)

按优先级分类

操作符的优先级分为15级,1级到15级优先级逐次降低,优先级较高的先进行运算:

1级(左结合)    () 圆括号 []下标操作符 ->指向结构体成员操作符 .结构体成员操作符
2级(右结合)    !逻辑非操作符 ~按位取反操作符 ++前缀增量操作符 --前缀减量操作符 +正号操作符 -负号操作符 (类型)类型转换运算符 *指针运算符 &地址运算符 sizeof长度运算符  
3级(左结合)    *乘法操作符 /除法操作符 %取余操作符    
4级(左结合)    +加法操作符 -减法操作符        
5级(左结合)    <<左移操作符 >>右移操作符   
6级(左结合)    <、<=、>、>=关系操作符 
7级(左结合)    ==等于操作符 !=不等于操作符   
8级(左结合)    &按位与操作符  
9级(左结合)    ^按位异或操作符 
10级(左结合)   |按位或操作符
11级(左结合)   &&逻辑与操作符   
12级(左结合)   ||逻辑或操作符 
13级(右结合)   ? :条件操作符
14级(右结合)   = += -= *= /= %= &= ^= |= <<= >>=赋值操作符  
15级(左结合)   ,逗号操作符   

操作符的运用

& 按位与

  • 按位与可用于一些简易算法
    例:编写代码实现:求一个整数存储在内存中的二进制中1的个数

    #include <stdio.h>
     int main()
     {
      int num = -1;
      int i = 0;
      int count = 0;//计数
      while(num)
      {
       count++;
       num = num&(num-1);
      }
      printf("二进制中1的个数 = %d\n",count);
      return 0;
     }
    

+ +和- -操作符用法

  • 关于自加自减的一般用法

     //前置++和--
     #include <stdio.h>
     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;
      }
    

^ 按位异或

  • 按位异或实现两个数交换

    #include <stdio.h>
    int main()
    {
       int a = 10;
       int b = 20; 
       a = a^b; 
       b = a^b; 
       a = a^b;
       printf("a = %d b = %d\n", a, b);
       return 0;
    }
    

编者按

从上面的各种分类不难看出,对于数目繁多且规则冗杂的操作符,C语言时常被人诟病,却也正是因为它提供的各项功能,赋予了C语言独特的价值,在表达式的计算中被用于更为广泛的领域。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值