当前位置:首页 > 经典书库 > 工程师手册

操作符

书籍:工程师手册

出处:按学科分类—工业技术 企业管理出版社《工程师手册》第850页(3982字)

在定义变量的大小和类型之后,需要利用变量进行某种运算,这是通过操作符完成,C语言比大多数高级语言的操作符要多,除了通常的赋值和算术操作外,C还操作一个完整的逻辑集,其中有些操作(如位操作)对于编写能有效利用目标处理器的DSP程序特别重要。

1.赋值操作

最基本的操作符是赋值操作符,在C中用等号(=)表示,等号右边的值,被赋给左边的变量。多个赋值语句可以进行,如a=b=1表示将1赋给b,再将b赋给a,其结果相当于a=1;b=1。在C语言中,a=ave(*x)是一个表达式,而a=ave(x);是一个语句,编译器根据最后有分号进行区分,表在达式总可以用在其它表达式中,因此,a=b+(c=ave(x));是一个合法语句。该语句执行的结果是,将ave(x)的值赋给C,再将b+c的值赋给a,C还允许一个语句中含有多个经逗号隔开的表达式,其中每个表达式都从左至右求值,整个表达式(由多个表达式组成)的值就等于最后一个表达式的值。例如,a=(olda=a,ave(x));将a的当前值赋给olda,调用函数ave(x)并将返回的结果赋给a。

2.算术操作与位操作

常用的二元算术操作在C中用下述符号表示:

* 乘法

/ 除法

十 加法

- 减法

% 取余

前四个操作符对所有类型的变量(char,int,float,double)均有定义,取余操作符仅适合于整数,注意C语言中没有指数操作符,这一浮点运算可通过函数调用实现。

C语言中有三个一元算术操作符。其中负号操作(如-i,i为int类型)改变操作数符号。另两个一元算术操作符是增量符和减量符,表示为++和--,它们分别整数变量或指针加1或减1。操作数通常在表达式的中间,增量或减量操作既可以在变量使用前进行,也可以在变量使用后进行。下面的例子说明这两个操作符对整变量i,j和k的作用:

j-7;

k=i+++j; /*i is incremented to 5.k=11*/

k=k+--j; /*i is decremcated to 6,k=17*/

k=k+i++; /*i is ineremented to 6,k=22*/

二元操作通过以下符号作用于整数;

& 位与(AND)

| 位或(OR)

位异或(XOR)

<< 算术左移(所移位数为操作数)

>> 算术右移(所移位数为操作数)

一元位操作NOT将操作数的所有位求反,其符号为例如,设i声明为unsigmed int,则i=o将i设置为最大的无符号整数。

3.组合操作

C允许操作符与赋值号(=)相结合,以使任一形如

〈variable〉=<variable〉<operator〉〈expression〉;

的语句可以用

〈variable>〈operator>=<expression〉;

代替,其中<variable〉代表同一个变量,例如:下述包含x和y的表达式对功能相同:

x=x+y; x+=y

x=x-y; x-=y;

x=x*y; x*=y;

x=x/y; x=y;

x=x%y: x%-y;

x=x&y; x&=y;

x=xv; x=y;

x=x<<y; x<<=y;

x=x>>y; x>>=y;

在多数情况下,用左边一列语句写出的程序更容易理解,因此通常避免使用组合操作符。但是有些编译器对使用组合操作符的语句能生成更有效的代码,

4.逻辑操作

与其它C表达式一样、包含逻辑操作符的表达式也有值,逻辑操作的结果为ture或false,这可以是两个值间的比较。或一系列“与”及“或”运算的结果、如果逻辑运算的结果为true,则其值为非零整数;如果结果是false,则其值为0。循环和条件语句通过检查逻辑运算的结果来控制程序流程C语言中的9个逻辑操作符为:

> 小于

<= 小于或等于

== 等于

>= 大于或等于

> 大于

!= 不等于

&& 逻辑与

‖ 逻辑或

! 逻辑非(一元操作符)

注意==容易与赋值操作符(=)混淆,混淆后仍得到一合法表达式,因为赋值的结果也可以解释为true或false。另外,&&和‖不应与对应的位操作符(&和‖)混淆,因为这可能导致难以发现的逻辑错误。

5.操作符优先权和类型转换

与其它高级语言一样,C的操作符优先权定义了一个表达式中哪些操作先完成,操作符的顺序还可通过括号改变。因此,括号中的部分最先求值,优先权相同的项从左到右计算。C语言中操作符的优先权如下(从高到低):

++,-- 增量,减量

- 一元负号

*,/,% 乘,除,取余

+,- 加,减

<<,>> 左移,右移

==,!= 等于,不等于

& 位与

位异或

| 位或

&& 逻辑与

‖ 逻辑

包含以上操作符的语句或表达式通常应使用同一类的变量和常量。但是,如果混合使用各种类型。C语言也不会象Pascal那样停止运行,或象FORTRAN那样产生奇怪的结果。C可以根据规则自动进行类型转换,类型转换的规则是:

(1)如果一个操作中包含两种类型,则级别低的类型转换为级别高的类型,这一过程称为“提升”。各种类型级别从高到低的顺序是:double,float,long.int,short,char,每种类型的符号型高于该类型。

(2)在赋值语句中,右边表达式的最后结果转换为左边的变量类型。这可能导致提升。也可能导致降级。

通常以上规则很有效,但有时必须注明转换方式,这可通过类型强制实现,方法是将所希望的类型名括起来置于被转换的变量或表达式之前,因此,设i为int型,则语句i=10*(1.55+1.67)将使i等于32(由32.2截尾得到);而语句i=10*i(int)1.55+1.67将使i等于26(由26.7截尾而得,因为(int)1.55的结果是1)。

分享到: