赋值过程的类型转换

如果赋值运算符两侧的类型不一致,但都是数值型或字符型,在赋值时要进行类型转换。类型转换有系统自动完成,转换的规则是:

(1)将实型数据(包括单、双精度)赋给整型变量时,先对实数取整(舍去小数部分),然后赋给整型变量。如:

int a;
a=3.14
执行的结果是,a的值为3,以整数形式存储在存储单元中,小数部分.14将被舍弃。

(2)将整型数据赋给单、双精度型变量时,数值不变,但以实数的形式存储到变量中。如:

float f ;
double d;
int i = 123;
f = i;
d = i;

执行的结果是,f=123.0000,d=123.0000000000000。可以看出,系统会在123的小数部分上通过补0的方式补齐有效位数。

(3)将一个double型数据赋给一个float型的变量时,会截取其前面的7位有效数字存放到float变量的存储单元中,但要注意,数值的范围不能溢出。如:

double d = 123.456789e10;
float f;
f = d;

上面代码中的f无法容纳如此大的数,出现溢出的错误。

(4)字符型数据赋给整型变量时,将字符的ASCII码赋给整型变量。

(5)将一个占字节数多的整型数据赋给一个占字节少的整型变量或者字符变量(例如,把一个4个字节的long型数据赋给一个2个字节的short型变量,或将一个2字节的int型数据赋给1字节的char型变量),只将其低字节原封不动地送到该变量(即发生截断)。如:

int i ;
char c;
i = 289;
c = i;

赋值的过程是把i的后八位(二进制码)赋给变量c,c得到的数值是33,如果用“%c”输出c变量 ,得到的将是字符“!”。要避免进行这种赋值,因为赋值后数值可能发生失真。如果一定要进行这种赋值,应当保证赋值后数值不发生失真,即所赋的值在变量的数值范围内。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值