在C程序中,若表达式中算术运算对象类型不同,则需要先统一为相同类型后再进行计算,例如,表达式“a-b”中,若a是双精度浮点型变量,b是整型变量,为了尽可能保证运算精度,通常进行处理是()。
- A.读取b值并转换为双精度浮点型数据,然后进行两个浮点数相减运算,变量b值不变
- B.读取a值并转换为整型数据,然后进行两个整数相减运算,变量a值不变
- C.将b重新定义为双精度浮点型娈量(其值自动转换为双精度型数据),再进行两个浮点数相减运算
- D.将a重新定义为整型变量(其值自动转换为整型数据),再进行两个整数相减运算
正确答案及解析
正确答案
A
解析
本题考查程序语言基础知识。
在表达式求值过程中,若参与运算数据类型不一致,则编译系统自动进行相应数据类型转换(隐式类型转换),类型转换一般规则是:为防止精度损失,如果必要话,类型总是被提升为较宽类型;所有含有小于整型有序类型算术表达式在计算之前其类型都会被转换成整型。
最宽类型为long double,运算时另一个操作数无论是什么类型都将被转换成long double。如果两个操作数都不是long double型,那么若其中一个操作数类型是double型,则另一个就被转换成double型。类似地,如果两个操作数都不是double型而其中一个操作float型,则另一个被转换成float型。否则如果两个操作数都不是3种浮点类型之一,它们一定是某种整值类型。在确定共同目标提升类型之前,编译器将在所有小于int整值类型上施加一个被称为整值提升过程。
在进行整值提升时类型char、signed char、unsigned char和short int都被提升为类型int。
C/C++语言编译系统提供内部数据类型自动隐式转换规则如下:
①程序在执行算术运算时,低类型可以转换为高类型。
②在赋值表达式中,右边表达式值自动隐式转换为左边变量类型,并赋值给它。
⑨当在函数调用时,将实参值赋给形参,系统隐式地将实参转换为形参类型后,赋给形参。
④函数有返回值时,系统将自动地将返回表达式类型转换为函数类型后,赋值给调用函数。