1.赋值运算符
赋值运算符“=”的作用就是将某个数据或表达式赋给一个变量或一个符号常量。由赋值运算符组成的表达式称为赋值表达式,一般格式为:
变量=表达式
格式说明:
(1)赋值表达式的运算过程是,先计算赋值运算符右边的表达式的值,然后将表达式的值赋给左边的变量。确切地说,是把表达式的值存放到以该变量为标识的存储单元中去。另外,赋值表达式本身也有一个值。例如,表达式a=3+5,执行后表达式本身的值为8,变量a的值也是8,也就是a对应的内存单元存放的值为8。
(2)赋值号右边必须是符合C语言规定的合法表达式。
(3)赋值运算符的左边只能是变量,而不能是表达式及字符常量。例如,a+b=1就是不合法的赋值表达式。
(4)赋值运算符右侧的表达式本身可以是赋值表达式。例如,a=1+(b=3),它的意义是将3赋给变量b,表达式(b=3)的值也为3,再计算3+1,将4赋予a,所以整个表达式的值为4,变量a的值为4,变量b的值为3。
(5)赋值运算符具有右结合性。表达式a=b=c=5,也就是a=(b=(c=5)),变量a、b、c以及整个表达式的值都为5。
(6)C语言规定,任何表达式在其末尾加上分号就构成为语句。因此a=3+5;a=b=c=5;都是赋值语句。
2.复合赋值运算符
赋值运算符还可以和其他双目运算符组合,形成复合赋值运算符。如+=、-=、*=等。由这些复合赋值运算符组成的表达式就称为复合赋值表达式。一般格式为:
变量 双目运算符=表达式 等价于 变量=(变量运算符表达式)
例如,a+=2等价于a=a+2,x*=y+1等价于x=x*(y+1)。
【例2-18】程序li2_4_5。
【程序说明】
(1)语句ch+=1;是将变量ch的ASCII码值加1,然后再赋值给ch,此时,ch的数值正好是字符‘B’的ASCII码,因此输出的是字符‘B’。(www.xing528.com)
(2)语句a%=ch;是将a对ch取余后的值赋给a。a的值为200,ch的值为66,200%66结果为2。变量a被重新赋值为2。
(3)语句b+=b-=b*b;等价于b+=(b-=b*b);b的初值为5。先计算(b-=b*b)即b=5-5*5,表达式的值-20,b的值也被更新为-20,再计算b+=(-20)即b=(-20)+(-20),表达式的值为-40,变量b的值也被更新为-40。
(4)语句c=(d=2)*(e=d+8);根据赋值运算符的优先级,先将2赋值给变量d,然后将“d+8”的值赋值给变量e,然后将变量d和e值相乘,得到的结果20赋值给变量c。
3.赋值运算中的类型转换
在赋值运算中,只有在赋值号右侧表达式的类型与左侧变量类型完全一致时,赋值操作才能进行。如果赋值运算符两边的数据类型不相同,系统将自动进行类型转换,即把赋值号右边的类型换成左边的类型。这种转换仅限于数值型数据或字符型数据之间,通常称为“赋值兼容”,如整数和浮点数、整数和字符。具体规定如下:
(1)将浮点型数据(包括单精度和双精度)赋予整型变量时,舍去浮点数的小数部分。
(2)将整型数据赋予浮点型变量时,数值不变,但将以浮点形式存放,即增加小数部分(小数部分的值为0)。
(3)将字符型数据赋予整型变量时,由于字符型为一个字节,而整型为2个字节(或更多)。所以,首先将字符的ASCII码值放到整型量的低八位中。然后,如果系统将字符处理为无符号的字符类型,则其他高位为0;如果系统将字符处理为带符号的字符类型,字符最高位为0,则其他高位为0,字符最高位为1,则其他高位为1。
(4)将整型数据赋予字符型变量时,只把低八位赋予字符变量。
【例2-19】程序li2_4_6。
【程序说明】
(1)语句a=x;将浮点型变量x的值1.54赋给整型变量a,舍弃小数部分,将整数部分1赋给变量a。
(2)语句x=12;将整数值12赋给浮点型变量x,增加小数部分。
(3)语句b='a';将字浮常量'a'赋给整型变量b,是将'a'的ASCII码97赋给b。
(4)语句ch=356;将整数常量356赋给字符型变量ch,取356的低8位(01100100即十进制的100)对应的字母'd'赋给ch。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。