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

 我来答
黑科技1718
2022-09-30 · TA获得超过5880个赞
知道小有建树答主
回答量:433
采纳率:97%
帮助的人:82.1万
展开全部

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

答案: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 型。
尽管算术转换的这些规则带给你的困惑可能多于启发,但是一般的思想是尽可能地保留型别表示式中涉及到的值的精度。这下是通过把不同的型别提升到当前出现的最宽的型别实
现的。

若有以下定义语句;char a ;int b ;float c ;double d;则表示式a*b+d-c 值的型别是?为什么?

double
值型别按照运算元里面范围大的来取

139.若有以下定义语句:char a;int b;float c;double d;则表示式a*b+d -c值的型别为 ( ) 求解~急

这题是考查你对资料型别级别的记忆,显然double级别最高,因而结果是double型

若有如下定义;char a;int b;float c;double d; 则表示式a*b+c-d值的型别为什么

表示式a*b+c-d值的型别为double
因为任意一次运算,都是把精度低的运算元转换为精度高的运算元,最后的答案,也就是精度最高的资料型别。

char a; int b; float c;d则表示式a*b+d-c值的型别为_ouble d;

char->int->float->double
优先转化为后面的型别进行运算

char a;int b;float c;double d;表示式a*b+d-c的型别为double,为什么?

自动向精度大的那个型别转换,doubule的精度最大。依次增大char ,int ,float ,double 。

若有:char a; int b;float c,double d;则a*b+d-c值的型别是什么啊?

double,c运算会使用两个运算元中占用记忆体较大的。

若有以下定义和语句,则值为12的表示式是( )。 A a=b+1; B c=10+2; C d=5; D q=10;

答案应选择 B

若定义了int a;char b;float c;,则表示式a*b-c 的型别是( )

各型别的混合运算 不管INT SHORT CHAR FLOAT 在混合运算中 都得化作DOUBLE型来运算 所以最后的答案当然也是双精度型

若有以下定义:int x=3,y=2;float a=2.5,b=3.5;则下面表示式的值为___________。(x+y)%2+(int)a/(int)b

(x+y)%2+(int)a/(int)b
其实就是
(3+2)%2+(int)2.5/(int)3.5
首先执行括号里面的内容,得到表示式:
5%2+(int)2.5/(int)3.5
小数强制转换成整数,只会得到整数部分!所以得到表示式:
5%2+(int)2/3
"%"是取余的意思,所以5%2得到的余数是1 2/3是一个小于1的小数,转化成整数之后就是0,于是得到表示式:
1+0
所以最后的结果就是1

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式