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填充高字节所有的二进制位。目的是保持数据值不变。
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填充高字节所有的二进制位。目的是保持数据值不变。
相关文章推荐
- (转载)C语言中算术运算的隐式类型转换规则
- C语言中算术运算的隐式类型转换规则
- C语言中不同数据类型间混合运算的转换规则
- [PowerShell入门]变量、赋值、算术运算、类型转换、数组、注释
- c++算术运算和位运算中类型转换和类型提升规则和方法
- C语言中不同数据类型间混合运算的转换规则
- c++算术运算和位运算中类型转换和类型提升规则和方法
- 解剖C语言---数据类型转换与数据运算集锦
- C语言一些基础:数据类型,运算类型及表达式
- SQL Server精度数据(decimal和numeric)在算术运算时的自动转换规则
- javascript各种类型数据在表达式中转换成布尔型值的规则总结
- 【转】C语言隐式类型转换规则
- C语言运算中的数据类型自动转换原则
- C语言中类型转换时的截取规则及补码表示的计算方法
- javascript各种类型数据在表达式中转换成布尔型值的规则总结
- C语言学习2:sizeof ,数据类型,scanf,算式操作,赋值与比较操作,逻辑操作,位的操作,条件运算符,特异赋值结果,强制转换,使用变量要注意的
- C++赋值兼容规则和类类型转换注意事项之一
- C语言运算中类型转换
- 在C语言里,float类型的量和int类型的量运算时,这个表达式值的数
- C语言表达式中的类型隐式转换