2.4.2 赋值运算符与赋值表达式
赋值运算符记为“=”,由“=”连接的式子称为赋值表达式。其一般形式为:
- 变量= 表达式
赋值表达式的功能是先计算表达式的值,再赋予左边的变量。赋值运算符具有右结合性。例如:
- pi=3.14; /*将常数3.14赋值给变量pi*/
- S=(a+b)*h/2; /*先计算算术表达式(a+b)*h/2的值,再赋值给变量S*/
- L=2*pi*r; /*先计算算术表达式2*pi*r的值,再赋值给变量L*/
按照C语言规定,任何表达式在其末尾加上分号就构成语句,如上面的例子中就构成了C语言的赋值语句。
另外,如果赋值运算符两边的数据类型不相同,系统将自动进行类型转换,即把等号右边的类型转换成左边的类型,具体规定如下:
实型赋予整型,舍去小数部分。
整型赋予实型,数值不变,但以浮点形式存放,即增加小数部分(小数部分的值为0)。
字符型赋予整型,由于字符型为一个字节,而整型为两个字节,故将字符的ASCII码值放到整型量的低八位中,高八位为0。
整型赋予字符型,只把低八位赋予字符量。
程序 2.2 说明了C语言赋值运算中的类型转换规则,代码如test2.c所示。
【程序 2.2】赋值运算中的类型转换规则:test2.c。
- #include <stdio.h>
- main()
- {
- int a,b=322;
- float x,y=8.88;
- char c1='k',c2;
- a=y; /*给整型变量赋实型值*/
- printf("a=%d\n",a);
- x=b; /*给实型变量赋整型值*/
- printf("x=%f\n",x);
- a=c1; /*给整型变量赋字符型值*/
- printf("a=%d\n",a);
- c2=b; /*给字符型变量赋整型值*/
- printf("c2=%c\n",c2);
- }
程序运行结果如下:
- a=8
- x=322.000000
- a=107
- c2=B
可以看到,由于a 为整型,所以赋予实型变量y 值8.88 后只取整数部分8。x 为实型,赋予整型变量b 值322 后增加了小数部分。字符型变量c1 赋予a 变为整型,整型量b 赋予c2 后取其低八位成为字符型(b 的低八位为01000010,即十进制66,按ASCII 码对应于字符B)。
在赋值符“=”之前加上其他二目运算符可构成复合赋值符。如+=,-=,*=,/=,%=,<<=,>>=,&=,^=,|=。
它们等价于各自相应的运算符,例如:
a+=5等价于a=a+5。
x*=y+7等价于x=x*(y+7)。
r%=p等价于r=r%p。
复合赋值符这种写法,对初学者可能不习惯,但十分有利于编译处理,能提高编译效率并产生质量较高的目标代码。