则赋值表达式:
x= k= 3.5
是先将实数3.5自动转换成整数3赋给整型变量k,然后又将整数3自动转换成实数3.0赋给实型变量X。所以,k的值是3,X的值是3.0。
在程序中,经常遇到在变量当前值的基础上作某种修正的运算。如
x=x+5.0
这类运算的特点是:变量既是运算对象,又是赋值对象。为避免对同一存储对象的地址重复计算,C语言弓队复合赋值运算符。它们是
+=、-=、*=、%=、〈〈=、〉〉= 、&= 、^=、|=
通常,记日为某个双目运算符,复合赋值运算
xθ=e
其等效的表达式为
x= xθ(e)
注意,当e是一个复杂表达式时,等效表达式的括号是必需的。如
y*= a+b
的等效表达式是y= y*(a+b)
赋值运算符和所有复合赋值运算符的优先级全相同,并且都是“自右至左”结合,它们的优先级高于远号运算符的优先级,低于其它所有运算符的优先级。
5.逗号运算符
逗号运算符“,”用于将若干表达式连接起来顺序地逐个计算。连续返号运算的一般形式为:
表达式1,表达式2,…,表达式n
它的计算顺序是从左到右逐一计算各表达式,并以表达式n的值为连续逗号运算的结果。例如,表达式
x=( i=3, i*2)
使i等于3,X等于6。其实,逗号运算只是把多个表达式串联起来,在许多情况下,使用逗号运算的目的只是想分别计算各个表达式的值,而并非想使用逗号运算中最后那个表达式的值。逗号运算最常用于for结构中,用于给多个变量登初值,或用于对多个变量的值逐一修改等。逗号运算符的优先级最低,其结合性是“自左向右”的。
6.条件运算符
条件运算是一个三目运算,有三个运算对象。条件运算的一般形式为
表达式1?表达式2:表达式3
条件运算的计算规则是:
(1)计算表达式1的值;
(2)如果表达式1的值非0(真),则计算表达式2,并以表达式2的值为条件运算的结果(不再计算表达式3);
(3)如果表达式1的值为0(假),则计算表达式3,并以表达式3的值为条件运算的结果(不再计算表达式2)。
例如,表达式
X>y?X:y
如果x>y条件为真,则条件运算取x值,否则取y值。
条件运算符(?:)的优先级高于赋值运算符,低于逻辑运算符,也低于关系运算符和算术运算符。例如,表达式
max= X> y?X: y+ l
等效于表达式
max=((x>y) ?x:( y+l))
条件运算符的结合性为“自右至左”。例如,表达式X>y?X:u>V?u:V
等效于表达式
X>y?X:(u>V?u:V)
7.长度运算符
长度运算以字节为单位给出其运算对象所需(或所占)的字节数,运算对象可以是任何类型的数据对象或数据类型。它是根据对象的类型来确定对象(所需)的字节数的。
长度运算有两种书写形式:
sizeof变量名或sizeof(类型名)
如果有某种类型为江的变量V,其中t可以是系统提供的类型或用户自己定义的类型,可以是简单的,也可以是数组、结构等。则 sizeof V就是变量 V所占的字节数。如有
int j;
double x;
表达式sizeof j和sizeOf x分别是变量j和x所占的字节数。
sizeof(t)是系统为分配一个类型为t的数据对象所需的字节数。如sizeOf(int)和sizeof(dou-ble)分别是系统为分配一个类型为int和double变量所需的字节数。
8.位运算符
位运算的运算对象只能是整型或字符型数据,位运算把运算对象看作是由二进位组成的位率信息,按位完成指定的运算,得到位串信息的结果。位运算符又可分成两类:一类是位逻辑运算符,另一类是位移位运算符。
位逻辑运算符有:&(按位与)、|(按位或)、^(按位异或)、~(按位取反)