一.算术表达式的类型转换规则
1.对于单精度实型操作数,系统先将表达式中所有单精度实型(float型)操作数(常量或变量)转换为双精度实型,在参与运算。
2.对于字符型操作数,系统先将表达式中所有的字符型操作数(常量或变量)转换成整形,并以其ASCII代码只参与运算。
3.当操作数的类型相同时,其结果类型不变。当操作数的类型不同时,一般情况下,其结果类型与操作数中字节数多的类型一致。
4.要注意函数返回值的类型对表达式类型的影响,如:表达式6*fabs(-4)的结果类型是双精度的。
二.赋值表达式的类型转换规则
1.将整形数据赋值给实型变量时,数据以浮点数形式存储到实型变量中去,但值的大小不变。
2.将实型数据赋值给整形变量时,舍去小数部分后,再赋值给整型变量。
3.将float型数据赋值给double型变量时,数值不变,有效位扩展至16位(小数点后补0),反之,将double型数据赋值给float型变量时,则截取double型数据的前七位有效数据,再赋值给float型变量。
4.将整型数据赋值给整型变量时,要格外关注两者之间的长度和符号类型上的差异,正是由于这些差异使得赋值完成后,变量里的值有所变化。
(1).当赋值号两边长度相同时,不管是signed还是unsigned,直接按位赋值,其值不变。
(2).将“长的”整型数据赋值给“短的”整型变量时,采取的截断方法是按照“短的”字节数截取“长的”相应的低字节并按位赋给“短的”整型变量,截断时不考虑符号类型(依“长的”符号)。
(3).将“短的”整型数据赋值给“长的”整型变量时,存在着“符号扩展”的问题。具体分为两种情况,即算术扩展与逻辑扩展。
《1》.有符数按算术扩展
在VC++中,采用算术扩展方式将有符“短的”整型数据赋给“长的”整形变量,再将有符数据按位赋值给长的整型变量的低字节。同时,以其符号位的值填充高字节所有的二进制位。目的是保持数据值不变。
《2》.无符数按逻辑扩展
将无符“短的”整型数据赋给“长的”整形变量,再将无符数据按位赋值给长的整型变量的低字节。同时,以0填充高字节所有的二进制位。目的是保持数据值不变。