1.赋值运算符
简单赋值运算符记为“=”。由“=”连接的式子称为赋值表达式。其一般格式为:
功能:先计算表达式的值,然后将该值赋给“=”左边的变量。
例如:
赋值运算符具有右结合性。因此“a=b=c=5;”可理解为“a=(b=(c=5));”。
注意:
①在程序中可以多次给同一个变量赋值,每赋一次值,它所对应的存储单元中的数据就被更新一次,内存中当前的数据就是最后一次所赋值的那个数据。
②不能给符号常量赋值,如先定义“#define N 5”,则N就代表5,不能再赋值(如N++或N=N+1);不能给表达式赋值(如,假设a、b均已经赋值,则c=a+b=18是错误的)。
③程序中可以出现这样的赋值语句:“x=(a=3)+(b=5);”,它的意义是把3赋给a,把5赋给b,再把a与b相加,最后把和值8赋给x。
2.赋值中的类型转换
如果赋值运算符两边的数据类型不相同,系统将自动进行类型转换,即把赋值号右边的类型换成左边的类型。这在前面2.7中已经叙述了,这里进一步讲一下转换规则。
(1)实型(包括单、双精度)赋给整型,舍去小数部分;整型赋给实型,数值不变,但增加小数部分的值0。
假设“double x=1.34;int y;”,执行“y=x;”后,小数部分丢失,y的值是1。
假设“int a=12;double b;”,执行“b=a;”后,b的值为12.0。(www.xing528.com)
(2)将双精度实型数据赋给单精度实型变量时,数据精度可能丢失。
假设“double a=1.23456785656676;float b;”,执行“b=a;”后,b的值是1.23457,赋值后,丢失了一些有效位数。
(3)“空间扩展”是指将小空间的数据赋值到较大的变量空间时,多余的字节需要填充的现象。如将单精度实型数据赋给双精度实型变量时,数据精度将增加。
假设“float a=1.23456;double b;”,执行“b=a;”后,b的值可能是1.2345600128173828,新增的有效位数其实是无意义的随机数。
(4)“符号位转换”是指在赋值运算中是否将最高位当作符号位进行了不同的解读。
例2-10 有符号整型数据与无符号整型数据之间的赋值运算。
程序运行结果如图2-14所示。
图2-14 程序运行结果
以上程序的前半段,在执行“y1=x1;”之后,y1和x1的内存数据都是0x8000,但无符号的整型变量x1的值是32768,有符号的整型变量y1的值是-32768。程序的后半段,在执行“y2=x2;”之后,y2和x2的内存数据都是0xffff,但有符号的整数变量x2的值是-1,无符号的整型变量的值是65535。内存变换如图2-15所示。
图2-15 有符号整型数据与无符号整型数据之间的赋值运算
注意:
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。