隐式转换

隐式转换

double  ←←←←←←float                                高
 ↑
 ↑
 long
 ↑
 ↑
unsigned 
 ↑
 ↑
int ←←←←←← char,short                              低

float x = 2.0; x = 11/3
x是float类型
3是int类型
因为3赋值到float这个变量类型里面了就变成3.0了
所以x=3.0

这个思路是不是这样的
如果再创建个int类型变量y
y=2.0
是不是float类型的变量2.0 赋值到int类型变量y里面就变成2了

又或者是这个样子的
因为上面那个代码表的排序是从低位到高位

char-short-int-unsigned-long-float-double

因为float比int高,所以前面的int 3自动就加了一个隐藏的float类型
float x=(float)3
如果是这样的float不应该是3.00么


数据类型转换一块我有点不清楚,上面写的是我的个人理解我也不知道那个是对的
这个章节案例讲的那个有符号和无符号那个(-20+6)我清楚,二进制的转换补码相加

对于这种有小数点,对照着这个章节的那个箭头指向就比较迷糊
char怎么也可以指向int
主要是int和float都指向double 但是int碰见了float就转成了float,float碰见了int呢
麻烦老师看一下这个那个是对的
类型转换是根据那个 赋值的变量数据类型储存 还是 前面自动加一个隐式转换
如果是自动加一个float和int都是指向double为什么要转成float

正在回答 回答被采纳积分+1

登陆购买课程后可参与讨论,去登陆

1回答
山行老师 2023-01-05 13:03:24
1.int碰见了float就转成了float,这个是隐式类型提升,直接用=赋值就可以了;
2.float变量赋值给int变量则需要借助取整函数round/floor/ceil/trunc(),这就不是隐式/显式类型转换;
3.类似于float b = (short)(11/3)的这种,实际是把11/3结果int显示转换为short,然后short再隐式转换为float;
  • 提问者 Cc大佬 #1

    无论是float赋值给int  还是int赋值给float结果都是float么

    是不是都是根据下面那个变量表  低位转到高位

    double  ←←←←←←float                                高
     ↑
     ↑
     long
     ↑
     ↑
    unsigned 
     ↑
     ↑
    int ←←←←←← char,short                              低


    2023-01-05 13:33:18
  • 你这个表是隐式类型转换,比如
    int a = 2;
    float pi = 3.14;
    pi = a;  //隐式类型提升,pi为2.0
    如果下面这样写就很隐式类型转换没有关系了
    int a = 2;
    float pi = 3.14;
    a = floor(pi);  //a为3,并且这里不能直接写a=pi有歧义
    你给的图片上是隐式类型提升的规律,不包括强转(显示转换),也不包括函数转换;

    2023-01-05 14:34:18
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师