llinux C运算符表达式



1.运算符分类      

1)算术运算符:用于各类数值运算,包括加(+)、减(-)、乘(*)、除(/)、求余(或称模运算,%)、自增(++)、自减(--

2)关系运算符:用于比较运算,包括大于(>)、小于(<)、等于(==)、大于等于(>=)、小于等于(<=)和不等于(!=

3)逻辑运算符:用于逻辑运算,包括与(&&)、或(||)、非(!)

4)位操作运算符:参与运算的量,按二进制位进行运算,包括位与(&)、位或(|)、位非(~)、位异或(^)、左移(<<)、右移(>>

5)赋值运算符:用于赋值运算,分为简单赋值(=)、复合算术赋值(+=-=*=/=%=)和复合位运算赋值(&=|=^=>>=<<=

6)条件运算符:这是一个三目运算符,用于条件求值(?:)

7)逗号运算符:用于把若干表达式组合成一个表达式(,)

8)指针运算符:用于取内容(*)和取地址(&

9)求字节运算符:也能给予计算数据类型所占的字节数(sizeof

10)特殊运算符:有括号()、下标[]、成员(->.

 

2.运算符的优先级

>算术运算符>关系运算符>&&>||>条件运算符>赋值运算符>逗号运算符

 

3.运算符的结合方向

左到右:特殊运算符,逗号运算符,算术运算符中加(+)、减(-)、乘(*)、除(/)、求余(或称模运算,%),关系运算符,逻辑运算符中与(&&)、或(||),位操作运算符中位与(&)、位或(|)、位异或(^)、左移(<<)、右移(>>),

右到左:算术运算符中自增(++)、自减(--, 逻辑运算符中非(!),位操作运算符中位非(~),赋值运算符,条件运算符,指针运算符,求字节运算符

4.一些容易出错的优先级问题

1.的优先级高于*

例如:*p.f   应是*p.f)对pf偏移作为指针,然后进行接触引用操作。

2[]高于*

例如:int*ap[] 应是int*ap[]ap是个元素为int指针的数组

3)函数()高于*

 例如:int*fp() 应是int*fp()fp是个函数,返回int*

4==高于位操作

 例如:(val&mask!=0)  应是val&(mask!=0)

5==高于赋值符     

 例如:c=getchar()!=EOF  应是c=getchar()!=EOF

6)算术运算符高于移位运算符   

 例如:msb<<4+lsb  应是msb<<(4+lsb)

7)逗号运算符优先级最低

 

5.几目运算符的分类

单目:算术运算符中自增(++)、自减(--,逻辑运算符中非(!),位操作运算符中位非(~),指针运算符

双目:算术运算符中加(+)、减(-)、乘(*)、除(/)、求余(或称模运算,%),关系运算符,逻辑运算符中与(&&)、或(||),位操作运算符中位与(&)、位或(|)、位异或(^)、左移(<<)、右移(>>),赋值运算符

三目:条件运算符

 

6. 自增自减运算符 i++; i–-++i–-i

i++++i的区别:

前缀表达式 ++i作用和i=i+1一样,先让变量i自增,之后用自增之后的i值作为表达式的值。

后缀表达式 i++ 先用i值作为表达式的值,之后i的值再自增。

i----i与上同理

 

7. 条件运算符 ? :

条件表达式? 表达式1:表达式2

如果条件表达式的值为真,表达式1的值为整个表达式的值。

如果条件表达式的值为假,表达式2的值为整个表达式的值。

 

8.按位与(&)应用     

1)清零特定位(mask中特定位置0,其他位为1s =s&mask

2)取某数中指定位(mask中特定位置1,其他位为0s = s&mask)

 

9.按位或(|)应用     

1)指定位置1,其余位不变(mask中特定位置1,其他位为0s = s|mask)

 

10.按位异或(^)应用

1)使特定位的值取反(mask中特定位置1,其他位为1s = s^mask

2)不引入第三变量,交换两个变量值(设a=a1,b=b1

     a=a^b,b=a^b,a=a^b

猜你喜欢

转载自blog.csdn.net/qy961212/article/details/78176170
今日推荐