1,若有以下定义,char a;int b;float c;double d;则表达式a*b+d-c值的类型为( )

如题所述

double类型。“隐式类型转换”C++定义了一组内置的类型对象之间的标准转换,在必要时它们被编译器隐式的应用到对象上。

在算式转换保证了二元操作符,如加法或乘法的两个操作数被提升为共同的类型,然后再用它表示结果的类型。


扩展资料:

C编译的整个过程很复杂,大致可以分为以下四个阶段:

1、预处理阶段在该阶段主要完成对源代码的预处理工作,主要包括对宏定义指令,头文件包含指令,预定义指令和特殊字符的处理,如对宏定义的替换以及文件头中所包含的文件中预定义代码的替换等,总之这步主要完成一些替换工作,输出是同源文件含义相同但内容不同的文件。

2、编译、优化阶段编译就是将第一阶段处理得到的文件通过词法语法分析等转换为汇编语言。优化包括对中间代码的优化,如删除公共表达式,循环优化等;和对目标代码的生成进行的优化,如如何充分利用机器的寄存器存放有关变量的值,以减少内存访问次数。

温馨提示:内容为网友见解,仅供参考
第1个回答  2020-05-15
double
表达式的类型会自动提升为参与表达式求值的最上级类型
第2个回答  2020-02-24
答案:double类型
参考:“隐式类型转换”
C++定义了一组内置的类型对象之间的标准转换,在必要时它们被编译器隐式的应用到对象上。在算式转换保证了二元操作符,如加法或乘法的两个操作数被提升为共同的类型,然后再用它表示结果的类型。两个通用的指导原则如下:
1、为防止精度损失,如果必要的话,类型总是被提升为较宽的类型。
2、所有含有小于整形的有序类型的算术表达式在计算之前其类型都会被转换成整形。
规则的定义如上面所述,这些规则定义了一个类型转换层次结构,我们从最宽的类型long
double
开始,那么另一个操作数无论是什么类型都将被转换成long
double
.如果两个操作数千不是long
double
型,那么若其中一个操作数的类型是double
型,则另一个就被转换成double
型。例如:
int
ival;
float
fval;
double
dval;
dval
+
fval
+
ival
//在计算加法前fval和ival都被转换成double
类似地,如果两个操作数都不是double型而其中一个操作float型
,则另一个被转换成float型。例如:
char
cval;
int
ival;
float
fval;
cval
+
ival
+
fval
//在计算加法前ival和cval都被转换成float
否则如果两个操作数都不是3种浮点类型之一,它们一定是某种整值类型。在确定共同的目标提升类型之前,编译器将在所有小于int
的整值类型上施加一个被称为整值提升的过程。
在进行整值提升时类型char、signed
char、unsigned
char和short
int
都被提升为类型int
。如果机器上的类型空间足够表示所有unsigned
short
型的值,这通常发生在short用半个字而int
用一个字表示的情况下,则unsigned
short
int
也被转换成int
否则它会被提升为unsigned
int
。wchar_t和枚举类型被提升为能够表示其底层类型所有值的最小整数类型。在下列表达式中:
char
cval;
bool
found;
enum
mumber{m1,m2,m3}mval;
unsigned
long
ulong;
cval
+
ulong;ulong
+
found;
mval
+
ulong;
在确定两个操作数被提升的公共类型之前,cval
found
和mval都被提升为int
类型。
一旦整值提升执行完毕,类型比较就又一次开始。如果一个操作是unsigned
long
型,则第二个也被转换成unsigned
long
型。在上面的例子中所有被加到ulong上的3个对象都被提升为unsigned
long
型。如果两个操作类型都不是unsigned
long
而其中一个操作long型,则另一个也被转换成long型。例如:
char
cval;
long
lval;
cval
+
1024
+
lval;
//在计算加法前cval和1024都被提升为long型

long类型的一般转换有一个例外。如果一个操作long型而另一个是unsigned
int
型,那么只有机器上的long型的长度足以unsigned
int
的所有值时(一般来说,在32位操作系统中long型和int
型都用一长表示,所以不满足这里的假设条件),unsigned
int
才会被转换为long型,否则两个操作数都被提升为unsigned
long
型。若两个操作数都不是long型而其中一个是unsigned
int

,则另一个也被转换成unsigned
int
型,否则两个操作数一定都是int
型。
尽管算术转换的这些规则带给你的困惑可能多于启发,但是一般的思想是尽可能地保留类型表达式中涉及到的值的精度。这下是通过把不同的类型提升到当前出现的最宽的类型实
现的。

...b;float c;double d;则表达式a*b+d-c值的类型为( )
规则的定义如上面所述,这些规则定义了一个类型转换层次结构,我们从最宽的类型long double 开始,那么另一个操作数无论是什么类型都将被转换成long double .如果两个操作数千不是long double 型,那么若其中一个操作数的类型是double 型,则另一个就被转换成double 型。例如:int ival;float fval;...

...char a;int b; float c;double d; 则表达式a*b+b-c值的类型为...
【答案】:D D。【解析】在表达式a*b+d-C中,double的类型最高,C语言中,由低类型自动向高类型转换,所以最后的结果一定是double型。

...char a;int b;float c;double d; 则表达式a*b+c-d值的类型为什么_百 ...
表达式a*b+c-d值的类型为double 因为任意一次运算,都是把精度低的操作数转换为精度高的操作数,最后的答案,也就是精度最高的数据类型。

已知chara;intb;floatC;doubled;则表达式a*b+c-d的结果为( )。
【答案】:A A。【解析】本题考查混合运算表达式类型,由表达式中具有最高优先级的类型所确定,所以答案为A。

char a;int b;float c;double d;则表达式a*b+c-d值的类型是?为什么
是double类型的。char类型会变成字母所对应的asc码值和int类型的相乘变成int类型。然后与float类型相加时变成float类型,最后与d相减时会变成double类型。

已知char a;int b;float c;double d;则表达式a-b+c-d结果为( )型。
【答案】A 【答案解析由易考吧专业提供】C语言中允许进行不同数据类型的混合运算,但在实际运算时,要先将不同类型的数据转化成同一类型再进行运算。类型转换的一般规则是:①运算中将所有char型转换成int型,float型转换成double型;②低级类型服从高级类型,并进行相应的转换,数据类型由低到高的顺序为...

char a; int b; float c;d则表达式a*b+d-c值的类型为_ouble d;
表达式a*b+d-c值的类型为double 只要出现了混合运算,float直接转换为double 其他由低向高转换

...定义:char a;int b;float c;double d;c*=b+d-c,则c的类型为?_百度...
char a;int b;float c;double d;c*=b+d-c这个表达式中含有不同的数据类型,那么编译器就会自动把低级类型向高级类型转换(当然这个转换是自动转换的)即编译器会把char ,int, float 转换成double的类型,c*=b+d-c但是我们定义变量c是float类型的,那么这个计算结果就会强制转换成float,然后把...

...题目:已知:char a; int b; float c; double d;则计算表达式a*c+c...
该题选择D答案:1、a定义的是char型,实际上他也可以看做是int型,你试过没有将一个char型的变量用%d的格式输出后,为一个整数,该整数是该字符的ASCII码,是十进制而已。所以a*c之后的类型为float型 2、a*c+c自然也就是float型了。。那么最后就变为float减去一个double型,因为double型表示的...

C语言:有定义语句char a;int b;float c;double d;
按照转换规则,就要先char转换为doubl型(因为double级别比char高),int 型转为double型 ,float型转为double型, 即全部转为 double型 再进行运算。 所以,最后的数据类型是double型 。【注意】不能理解为:先将char转换成int,再转换成floatd,再转换成double。希望对您有所帮助!

相似回答
大家正在搜