你所不知道的坑——————C语言运算符!!!!!

C语言中运算符作为最基本的结构,起着不可忽视的作用,而像我们这样的新手,初期很容易在这里栽坑。因此操作符的总结是必要的。

———————————————————下面就是详细的分析各种操作符———————————————————


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

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

三、 逻辑运算符:用于逻辑运算。包括与(&&)、或(||)、非(!)三种。

四、 位操作运算符:参与运算的量,按二进制位进行运算。包括位与(&)AND、位或(|)OR、位非(~)NOT、位异或(^)XOR、左移(<<)、右移(>>)六种。

五、 赋值运算符:用于赋值运算,分为简单赋值(=)、复合算术赋值(+=,-=,*=,/=,%=)和复合位运算赋值(&=,|=,^=,>>=,<<=)三类共十一种。

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

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

八、 指针运算符:用于取内容(*)和取地址(&)二种运算。

九、 求字节数运算符:用于计算数据类型所占的字节数(sizeof)。

十、 特殊运算符:有括号(),下标[],成员(→,.)等几种。

优先级:C语言中,运算符的运算优先级共分为15 级。1 级最高,15 级最低。 在表达式中,优先级较高的先于优先级较低的进行运算。而在一个运算量两侧的运算符 优先级相同时,则按运算符的结合性所规定的结合方向处理。

优先级等级口诀
圆方括号、箭头一句号, 自增自减非反负、针强地址长度,
乘除,加减,再移位,
小等大等、等等不等,
八位与,七位异,六位或,五与,四或,三疑,二赋,一真逗。

而在使用操作符时,不经意间就会忽略了至关重要的优先级。下列就是优先级顺序:

基本表达式 1级

基本表达式(Primary expressions),主要是用于运算符之间,做为运算数。
标识,常量,字符串文字量,优先级提升表达式最优先执行。
优先级提升表达式是指圆括号包围的表达式,如“( expression )”

后缀表达式 2级

postfix-expression [ expression ],数组下标运算。
postfix-expression ( argument-expression-list),函数调用,括号内的参数可选。
postfix-expression . identifier,成员访问,
postfix-expression -> identifier,成员访问,->号之前应为指针。
postfix-expression ++,后缀自增
postfix-expression --,后缀自减
( type-name ) { initializer-list }
( type-name ) { initializer-list , } 复合初始化,C99后新增。例如
1
2
3
4
5
6
7
8
9
10
  int * a = ( int []) { 1, 2, 3 };
 
 
//等价于
 
  
  int  unamed[] = {1, 2, 3};  //unamed表示一个不可见的变量名。
 
 
  int * a = unamed; 

单目/一元运算 3级

++ unary-expression 前缀自增
-- unary-expression 前缀自减
unary-operator cast-expression 单目转型表式式, 包括 取地址& ,提领 * , 正号+ ,负号- 位反~ 逻辑否!。
sizeof unary-expression 求类型长度,对表达式求类型长度
sizeof ( type-name ) 求类型长度

强制类型表达式 4级

( type-name ) cast-expression,强制表达式成为type-name指定的类型。

乘法表达式 5级

“ * ” 乘法运算符;“ / ”除法运算符;“ % ” 取余运算符。

加法运算符 6级

“ + ”加法运算符;“ - ”减法运算符。

移位运算符 7级

<< 左移运算符;>> 右移运算符。

关系运算符 8级

<、<=、>、>=关系运算符。

相等运算符 9级

“ == ”等于运算符;“ != ”不等于运算符。

位与运算符 10级

“ & ”按位与运算符

位异或运算符 11级

“ ∧ ”按位异或运算符(Bitwise exclusive OR operator)。

位或运算符 12 级

“ | ”按位或运算符(Bitwise inclusive OR operator)。
 

逻辑与运算符 13级

“&&”逻辑与运算符。

逻辑或运算符 14 级

“ || ”逻辑或运算符。

三元条件运算符 15级

? :条件运算符。

赋值运算符 16 级

=、 +=、 -=、 *=、 /=、 %=、 &=、 ^=、 |=、 <<=、 >>=赋值运算符。

逗号运算符 17级

“,”逗号运算符。
[pre]C 语言中,逗号(,)也可以是运算符,称为逗号运算符(Comma Operator)。逗号运算符可以把两个以上(包含两个)的表达式连接成一个表达式,称为逗号表达式。其一般形式为:
  子表达式1, 子表达式2, ..., 子表达式n
  例如:
  a + b, c = b, c++
  逗号运算符的优先级是所有运算符中级别最低的,通常配合 for 循环使用。逗号表达式最右边的子表达式的值即为逗号表达式的值。上例中,c++ 的值(c 自增之前的值)即为该表达式的值。
  逗号运算符保证左边的子表达式运算结束后才进行右边的子表达式的运算。也就是说,逗号运算符是一个序列点,其左边所有副作用都结束后,才对其右边的子表达式进行运算。因此,上例中,c 得到 b 的值后,才进行自增运算。
此外还可以参考著名资料进行学习

1.ISO .Programming languages -- C :ISO/IEC 9899,1999 2.King, K.N 著,吕秀锋 译.C语言程序设计:现代方法.北京:人民邮电出版社,2007,2009重印:33


猜你喜欢

转载自blog.csdn.net/qq_36971449/article/details/79812415