用于比较运算。包括大于(>)、小于(<)、等于(==)、
大于等于(>=)、
小于等于(<=)和不等于(!=)六种。
参与运算的量,按二进制位进行运算。包括位与(&)、位或(|)、位非(~)、位异或(^)、
左移(<<)、右移(>>)六种。
用于
赋值运算,分为简单赋值(=)、复合算术赋值(+=,-=,*=,/=,%=)和复合位运算赋值(&=,|=,^=,>>=,<<=)三类共十一种。
C语言是一种运算符非常丰富的语言,多达34种。其中C语言中*号出现频率非常高,其用法分成了9类:乘法运算符、复合赋值运算符、假读符、
注释符、普通符号、指针定义符、指向运算符、行列
地址转换符和地址值符。
. 结构体成员运算符(请注意它是一个实心圆点)
|
按位或运算符 举例:0xfe|0xef 即为1111 1110 与1110 1111按位或运算则答案为:1111 1111 即0xff。
现代计算机编程领域当中的 C语言自出现到发展成熟经历了较长的一段时间, 也经历了一次次的发展变革。C语言最初是从
BCPL计算机语言中衍生而来,早在 1937 年,
剑桥大学的一位研究人员利用当时现有的知识对 CPL计算机语言进行了简化, 这样就出现了性能更为优越的 BCPL计算机语言。人类对于新型技术的追求从未止步,即使 BCPL计算机语言在当时已经较为优秀,但人们还是在不断地对其进行优化,于是在 1970 年,在美国的
贝尔实验室,研究人员再一次对 BCPL计算机语言进行了优化, 并成功的以 BCPL作为基础语言,研究出了计算机
B语言,这一研究成果让人类和计算机之间的沟通更近了一步,也有助于计算机编程领域的发展。在1972年,美国的贝尔实验室再一次对计算机语言进行了优化,并且在这次优化当中,以计算机 B语言作为基础,创造出了一种新型的计算机语言, 并在对这种新型计算机语言进行分析的时候以 BCPL语言的第二个字母进行了命名,这也就成为了现代计算机编程领域
使用频率较高的计算机 C语言,并在不断运用中得以完善。为了推广
UNIX操作系统,1977年 DennisM.Ritchie发表了不依赖于具体机器系统的 C语言编译文本《可移植的 C语言编译程序》。1978年由美国电话电报公司(
AT&T)贝尔实验室正式发表了C语言。ANSI于1983年夏天,在 CBEMA的领导下建立了 X3J11 委员会,目的是产生一个 C标准。X3J11在 1989年末提出了一个他们的报告[ANSI89],后来这个标准被 ISO接受为 ISO/IEC9899- 1990。1990 年,
国际标准化组织 ISO(International Organization for Standards)接受了 89ANSIC为
ISOC的标准(ISO9899- 1990)。1994 年,ISO修订了 C语言的标准。1995 年,ISO对 C90 做了一些修订,“1995 基准增补 1(ISO/IEC/9899/AMD1:1995)”。1999 年,ISO又对C语言标准进行了修订,在基本保留原来 C语言特征的基础上,针对应该的需要,增加了一些功能,尤其是对 C++ 中的一些功能,命名为ISO/IEC9899:1999。
优先级是用来标识运算符在
表达式中的
运算顺序的,在求解表达式的值的时候,总是先按运算符的优先次序由高到低进行操作。
当一个运算对象两侧的运算符优先级别相同时,则按运算符的结合性来确定表达式的运算顺序。关于结合性的概念在其他
高级语言中是没有的,这是C语言的特点之一。在标准C语言的文档里,对
操作符的结合性并没有做出非常清楚的解释。一个满分的回答是:它是仲裁者,在几个操作符具有相同的优先级时决定先执行哪一个。C语言也将 34 种运算符规定了不同的结合性。大多数运算符结合方向是“自左至右”,即:先左后右,也叫“左结合性”,例如 a-b + c,表达式中有-和+两种运算符,且优先级相同,按先左后右结合方向,先围绕
减号结合,执行 a-b 的运算,再围绕加号结合,完成运算(a-b) + c。除了左结合性外,C 语
言有三类运算符的结合方向是从右至左,也叫“右结合性”,即:
单目运算符、
条件运算符、以及
赋值运算符。着重强调一点,无论是左结合性,还是右结合性,是针对两个相邻的优先级相同的运行符言(不是表达中的运算对象),运算符是决定左右的
基准点,先以前面的运算符(即位置上处于左边的运算符)构造运算,就是左结合,反之,就是右结合。与运算符及表达式相关的重要概念,除
运算符优先级和结合性外,C 标准定义的副作用(Side Effects)和序列点(Sequence Point)也是不可或缺的两个概念。
C标准对副作用的定义是,访问易变(Volatile)型变量、修改变量、修改文件、以及调用执行前述操作的函数都是副作用。副作用可以简单理解成,作为表达式求值过程中的副产品,某些变量的值发生了修改。
(3)每个完整表达式结束时。完整表达式包括变量初始化表达式,
表达式语句的表达式,
return 语句的表达式,if 或
switch 语句中的控制表达式,
while 或 do语句的控制表达式,for 语句的所有三个表达式;
(4)标准库函数返回之前,标准输入输出函数格式化转换说明符关联动作之后,标准查找函数和排序函数在调用比较函数之前和之后及
参数传递之后.
由序列点的定义可知,与运算符&&;或运算符||;逗号运算符,;条件运算符?:等 4 个运算符的左
操作数属于前一个序列点,右操作数属于后一个序列点,因此,这 4 个运算符的左操作数的求值要先于右操作数完成。