操作符详解

操作符大概分为以下几类:

1.算术操作符

2.移位操作符

3.位操作符

4.赋值操作符

5.单目操作符

6.关系操作符

7.逻辑操作符

8.条件操作符

9.逗号表达式

10.下表引用,函数调用和结构成员

算数操作符

+   -   *   /  %

/  可用于整数和浮点数,只要有浮点数参与就是浮点除法。

% 只能作用于整数。

移位操作符

<< 左移操作符

>> 右移操作符

移位操作符,移动的是数字的二进制码而不是本身数字,

右移时  分为算术右移和逻辑右移两种情况

算术右移是左边用原该值的符号位填充

逻辑右移是左边补零

 比如 -1  存储补码

111111111111111111111111

算术右移

111111111111111111111111

逻辑右移

011111111111111111111111

位操作符

& //按位与

|  //按位或

^  //按位异或

它们的操作数必须是整数,

 

赋值操作符

=

当然还有复合赋值符

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

作用都和简单+=一样    

x += 1;  ======>      x = x + 1;

单目操作符

! 逻辑反操作

-    负值

+   正直

&   取地址

sizeof     真是一个单目操作符,不是函数

~    对一个数的二进制按位取反

--   有前置,后置

++   有前置,后置

*     解引用操作符

(类型)  强制类型转换

 

关系操作度符

>    >=   <   <=    !=   ==

使用时注意  ==  和辅助 = 的区别

逻辑操作符

&&  逻辑与     有一个为假则返回假

||    逻辑或   有一个为真则返回真

返回的是  真或假    

exp1 && exp2     如果exp1为真,则计算exp2.     但如果exp1 为假,则exp2不计算;

exp1 ||  exp2     如果exp1为真,则不计算exp2,但如果exp1为假,则exp2计算;

条件操作符

exp1 ?exp2 :exp3

exp1为真   则输出exp2,为假  则输出exp3

逗号表达式

exp1,exp2,exp3,……exp n

从左向右依次执行,但最后的exp n 为整个表达式的结果

 

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

[]    ()    

访问一个结构成员
 

#include<stdio.h>
struct Stu
{     
    char name[10];      
    int    age;    
    char  sex[5];      
    double   score
};

void  set_age1(struct Stu stu)
{
     stu.age = 18;
}

void  set_age2(struct Stu*  pstu)
{
     pstu->age = 18;
}

int main()
{
     struct Stu stu;
     struct Stu* pStu = &stu;//结构成员访问        
     stu.age = 20;//结构成员访问    
     set_age1(stu);       
     pStu->age = 20;//结构成员访问    
     set_age2(pStu);   
      return 0; 
}


 

 

表达式求值   

表达式求值的顺序一部分是由操作符的优先级和结合性决定。
同样,有些表达式的操作数在求值的过程中可能需要转换为其他类型

 

隐形类型转换

C的整型算术运算总是至少以缺省整型类型的精度来进行的。
为了获得这个精度,表达式中的字符和短整型操作数在使用之前被转换为普通整型,这种转换称为整型提升

 

整形提升意义

表达式的整型运算要在CPU的相应运算器件内执行,CPU内整型运算器(ALU)的操作数的字节长度一般就是int 的字节长度,同时也是CPU的通用寄存器的长度。 因此,即使两个char类型的相加,在CPU执行时实际上也要先转换为CPU内整型操作数的标准长度。 通用CPU(general-purpose CPU)是难以直接实现两个8比特字节直接相加运算(虽然机器指令中可能有这 种字节相加指令)。所以,表达式中各种长度可能小于int长度的整型值,都必须先转换为int或unsigned int,然后才能送入CPU去执行运算

  

   表达式                            结合性

() 聚组 (表达式)
 
() 函数调用                   L-R
[ ] 下标引用                       L-R 
. 访问结构成员                  L-R 
-> 访问结构指针成员        L-R 
++ 后缀自增                      L-R
-- 后缀自减                        L-R 
! 逻辑反                             R-L 
~ 按位取反                        R-L 
+ 单目,表示正值              R-L 
- 单目,表示负值               R-L 
++ 前缀自增                       R-L 
-- 前缀自减                         R-L
* 间接访问                          R-L 
& 取地址                             R-L 
sizeof

类型转换 (类型)                   R-L 
* 乘法                                   L-R 
/ 除法                                    L-R 
% 整数取余                           L-R 
+ 加法                                    L-R 
- 减法                                     L-R 
<< 左移位                              L-R 
>> 右移位                              L-R 
> 大于                                    L-R 
>= 大于等于                            L-R 

< 小于                                       L-R 
<= 小于等于                              L-R
== 等于                                      L-R 
!= 不等于                                    L-R 
& 位与                                         L-R 
^ 位异或                                      L-R 
| 位或                                           L-R 
&& 逻辑与                                   L-R 
|| 逻辑或                                      L-R 
?: 条件操作符                          N/A 
= 赋值                                          R-L 
+= 以...加                                     R-L 
-= 以...减                                       R-L 
*= 以...乘                                       R-L 
/= 以...除                                       R-L 
%= 以...取模                                  R-L 
<<= 以...左移                                 R-L 
>>= 以...右移                                R-L 
&= 以...与                                      R-L 
^= 以...异或                                    R-L 
|= 以...或                                         R-L 
, 逗号                                           L-R 
 

 

 

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值