您的位置:首页 > 编程语言 > C语言/C++

c语言算术运算表达式与赋值运算表达式的类型转换规则

2016-08-11 16:52 465 查看
一.算术表达式的类型转换规则

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填充高字节所有的二进制位。目的是保持数据值不变。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: