c++数据类型问题

来源:百度知道 编辑:UC知道 时间:2024/06/05 05:01:31
char a='a';
float f=12.5;
int i=2;
则表达式10+a+i*f值的数据类型是
A int B float C double D char

麻烦说明一下理由!谢谢了

答案是 double,但不建议这样的表达式

在处理这样的表达式的时候,C++先后进行两种转换
1. 类型升级
2. 算术转换

第一步,类型升级。1)C++将在表达式中的所有bool, char, unsigned char, signed char, 和short转换成int。2)对于unsigned short,如果在所用系统中short比int小,则将unsigned short转为int。如果short和int一样长的话则将unsigned short转为unsigned int。

第二步,算术转换。这里遵循这样的顺序long double ->double ->float ->unsigned long ->long ->unsigned int ->int。就是有long double在那大家都转为long double,没有则看有double大家都转为double,一级一级看下去。其中有一个特殊的地方是在unsigned long和long之间。如果在一个表达式中有long还有unsigned int(当然没有比long大的在)如果在使用的系统中long可以表达unsigned int数据范围,则转为long,不然转为unsigned long。

虽然有些冗长,但C++是个完善的语言系统,它为了支持各种类型以及它们可能产生的种种情况,并且保持它的完整性,也很是为难啊,大家就体谅吧。

double 类型

不同类型的数在进行算术运算的时候,为保持结果的精确性,不同类型的数据要先转换成同一类型,低精度类型会向高精度类型转换。float型一律先转换成double型,char型一律先转换成int型。

b