C语言运算符


C语言运算符

文章插图
C语言运算符C语言运算符是说明特定操作的符号,它是构造C语言表达式的工具 。C语言的运算异常丰富,除了控制语句和输入输出以外的几乎所有的基本操作都为运算符处理 。除了常见的三大类,算术运算符、关係运算符与逻辑运算符之外,还有一些用于完成特殊任务的运算符,比如位运算符 。
基本介绍中文名:C语言运算符
外文名:Operators of C programming language
类别:电脑程式语言
作用:说明特定操作
分类和级别C语言的运算符主要用于构成表达式,同一个符号在不同的表达式中,其作用并不一致 。下面按计算的优先顺序,分别说明不同作用的表达式 。需要特别指出,在C语言标準中,并没有结合性的说法 。相同优先权运算符,从左至右依次运算 。注意后缀运算优先权高于前缀 。因此++i++应解释为++(i++) 。而与或非的运算优先权都不一样,因此a && b || b && c解释为(a && b) || (b && c)合理使用优先权可以极大简化表达式 。基本表达式 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后新增 。例如【C语言运算符】 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 的值后,才进行自增运算 。优先权优先权:C语言中,运算符的运算优先权共分为15 级 。1 级最高,15 级最低 。在表达式中,优先权较高的先于优先权较低的进行运算 。而在一个运算量两侧的运算符 优先权相同时,则按运算符的结合性所规定的结合方向处理 。结合性:C语言中各运算符的结合性分为两种,即左结合性(自左至右)和右结合性(自右至左) 。例如算术运算符的结合性是自左至右,即先左后右 。如有表达式x-y+z 则y 应先与“-”号结合,执行x-y 运算,然后再执行+z 的运算 。这种自左至右的结合 方向就称为“左结合性” 。而自右至左的结合方向称为“右结合性” 。最典型的右结合 性运算符是赋值运算符 。如x=y=z,由于“=”的右结合性,应先执行y=z 再执行x=(y=z)运算 。C语言运算符中有不少为右结合性,应注意区别,以避免理解错误 。优先权从上到下依次递减,最上面具有最高的优先权,逗号操作符具有最低的优先权 。