c语言题目:若有下列定义:char a;int b;float c;double d;c*=b+d-c,则c的类型为?
5个回答
展开全部
你好!!!
char
a;int
b;float
c;double
d;
c*=b+d-c这个表达式中含有不同的数据类型,那么
编译器
就会自动把低级类型向高级
类型转换
(当然这个转换是自动转换的)即编译器会把char
,int,
float
转换成double的类型,
c*=b+d-c但是我们定义变量c是float类型的,那么这个计算结果就会
强制转换
成float,然后把转化后float类型的数据在赋值给变量c.
总结:在有不同类型的计算中,都会把低级运算想高级运算自动转化,要是表达式中都float,那么其他低于float类型的都会转化成float,要是有double也是如此。
但是注意一点:
编译器
在计算的时候是按等级最高的类型计算的,计算的只是表达式结果的类型,那要是把高级类型的几个赋值给低级类型,会发出自动转换。比如:
char
a;int
b;float
c;double
d;
表达式a+b+c+d,那么这个表达式中最高的类型就是double,那么表达结果的类型就是double,但是我们可把double类型赋值给int
类型:int
x=a+b+c+d,那么此时x的类型还是int
char
a;int
b;float
c;double
d;
c*=b+d-c这个表达式中含有不同的数据类型,那么
编译器
就会自动把低级类型向高级
类型转换
(当然这个转换是自动转换的)即编译器会把char
,int,
float
转换成double的类型,
c*=b+d-c但是我们定义变量c是float类型的,那么这个计算结果就会
强制转换
成float,然后把转化后float类型的数据在赋值给变量c.
总结:在有不同类型的计算中,都会把低级运算想高级运算自动转化,要是表达式中都float,那么其他低于float类型的都会转化成float,要是有double也是如此。
但是注意一点:
编译器
在计算的时候是按等级最高的类型计算的,计算的只是表达式结果的类型,那要是把高级类型的几个赋值给低级类型,会发出自动转换。比如:
char
a;int
b;float
c;double
d;
表达式a+b+c+d,那么这个表达式中最高的类型就是double,那么表达结果的类型就是double,但是我们可把double类型赋值给int
类型:int
x=a+b+c+d,那么此时x的类型还是int
展开全部
这个c的类型肯定是double的
这是数字类型转换的基本规则,有double参与运算,则结果肯定是double的
这是数字类型转换的基本规则,有double参与运算,则结果肯定是double的
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
你定义C为float,最后c就是float
虽然b+d-c的结果是double型,
但最后赋值给c时都要强制转为float型
毕竟c(float)只占4个字节的空间,你怎么把8个字节的内容(double)直接放进去呢?
虽然b+d-c的结果是double型,
但最后赋值给c时都要强制转为float型
毕竟c(float)只占4个字节的空间,你怎么把8个字节的内容(double)直接放进去呢?
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
高
double
<--float
^
^
|
|
|
long
|
|
|
unsignd
|
|
低
int
<--
char,short
由低到高!注意这个不是一层一层的变的(int->unsigned->long->long)
int->long,int->double都是可行的
double
<--float
^
^
|
|
|
long
|
|
|
unsignd
|
|
低
int
<--
char,short
由低到高!注意这个不是一层一层的变的(int->unsigned->long->long)
int->long,int->double都是可行的
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
这个是肯定要发生隐式转换的,你小类型和大类型做运算,就会发生这样的情况
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询