不同类型变量赋值的讨论

来源:互联网 发布:香港移动网络制式 编辑:程序博客网 时间:2024/05/21 18:46

摘自《当胸生层云:C语言开发修行实录》

50页对赋值运算符(=)两端为不同类型的变量之间赋值时的情况做了一个总结,现摘录如下:

具体规则如下:

(1)整形赋予实型:数值不变,但将以浮点形式存放,即增加小数点部分(小数部分的值为0)。这个好理解。

(2)实型赋予整型:要舍去小数部分。

(3)字符型赋予整型:因为字符型为一个字节,而整型为两个字节,所以要将字符的ADCII码放到整型量的低八位中,高八位为0.

整型赋予字符型,只把低八位赋予字符量。具体来说有如下两种情况。

     1.如果所用系统将字符处理为无符号的量或对unsigned char型变量赋值,则将字符数据的8位放到整型的低8位中,高8位补0;

     2.若所用系统(turbo c)将字符处理为带符号的(即signed char),若字符最高位为0,则整型变量最高8为补0;若字符最高位为1,则

         最高8位补1.这称为“符号扩展”,这样做的目的是使数值保持不变。意思是负数以补码的方式存储。

(4)float型数据赋给Double型数据时:数值不变,有效位扩展到16位。

(5)将一个int、short、long型数据赋给一个char型变量:只将其低8位原封不动的送到char型变量(截断)。

(6)double型数据赋值为float型数据:只截取其前面的7位有效数字,存放在float变量的存储单元中,但是数值不能溢出。否则产生溢出错误。

(7)将unsigned int型数据赋给long int型变量:不存在符号扩展问题,只需将高位补0即可。

(8)将带符号的整型数据(int型)赋给long型变量时:要进行符号扩展,与(3)2类似。

(9)将一个unsigned类型数据赋给一个占字节数相同的整型变量,例如:unsigned int=》int,unsigned long=》long,unsigned short=》short;将unsigned

型变量原样送到非unsigned型变量中,但如果数据范围超过响应的整型范围,则为出现数据错误。

(10)将非unsigned型数据赋给长度相同的unsigned类型变量:也是原样照赋,连原有的符号位也做为数值一起传送。


原创粉丝点击