黑马程序员技术交流社区

标题: 关于数据类型的疑惑 [打印本页]

作者: Dark_Knight    时间: 2014-12-8 20:22
标题: 关于数据类型的疑惑
级别从低到高为:byte,char,short(这三个平级)-->int-->float-->long-->double
这个大神的笔记里的,但是这个级别是按什么排列的,没看明白。
作者: ben_vs_cong    时间: 2014-12-8 20:35
我觉得是按照,精度和占的字节排的。
作者: chudaming213    时间: 2014-12-8 20:55
按占用内存空间的大小吧。byte 八位 char short 十六位 int float 32位 long double 64位
作者: Dark_Knight    时间: 2014-12-8 20:58
chudaming213 发表于 2014-12-8 20:55
按占用内存空间的大小吧。byte 八位 char short 十六位 int float 32位 long double 64位 ...

但是为什么byte和short是平级的呢
作者: chudaming213    时间: 2014-12-8 21:02
Dark_Knight 发表于 2014-12-8 20:58
但是为什么byte和short是平级的呢

他说错了
作者: c91764000    时间: 2014-12-8 21:26
表达式的数据类型自动提升 所有的byte型、short型和char的值将被提升到int型。 如果一个操作数是long型,计算结果就是long型; 如果一个操作数是float型,计算结果就是float型; 如果一个操作数是double型,计算结果就是double型 楼主可以按照这个思路去理解一下!
作者: Dark_Knight    时间: 2014-12-8 21:30
chudaming213 发表于 2014-12-8 20:55
按占用内存空间的大小吧。byte 八位 char short 十六位 int float 32位 long double 64位 ...

是不是因为byte和char,short体现到屏幕上都是两个字节,所以byte已经被提升了,所以他们是同一级的。
作者: Dark_Knight    时间: 2014-12-8 21:36
c91764000 发表于 2014-12-8 21:26
表达式的数据类型自动提升 所有的byte型、short型和char的值将被提升到int型。 如果一个操作数是long型,计 ...

是只有byte被提升了吧
作者: boycechan    时间: 2014-12-8 21:37
你说的平级是指类型的自动提升吧?支持五楼说法!
作者: c91764000    时间: 2014-12-8 21:40
Dark_Knight 发表于 2014-12-8 21:36
是只有byte被提升了吧

byte是一个字节,short和char是2个字节 int是四个字节。所以都会被提升为int
作者: run_wind    时间: 2014-12-8 21:46
是指占得字节数,也没什么平级的,byte一个Byet,char.short两个Byet,int,float四个Byet。long double八个Byet.
作者: chudaming213    时间: 2014-12-8 23:19
Dark_Knight 发表于 2014-12-8 21:30
是不是因为byte和char,short体现到屏幕上都是两个字节,所以byte已经被提升了,所以他们是同一级的。 ...

这跟在屏幕上显示没有关系。 他应该强调的是向上提升,所谓“上”就得有个排列不是,排列的标准就是占用内存的大小,他写的这个就是按占用内存大小排列的顺序。因为每次运算后结果大小都不确定,为了保证能盛得了运算结果,就找个大点的容器吗,所以就向上提升了。“体现到屏幕上都是两个字节“你是怎么看出来的???
作者: Dark_Knight    时间: 2014-12-8 23:36
chudaming213 发表于 2014-12-8 23:19
这跟在屏幕上显示没有关系。 他应该强调的是向上提升,所谓“上”就得有个排列不是,排列的标准就是占用 ...

我明白了 谢谢,大神的笔记好像有个地方写错了,long——>float才对吧,我试过了float c = 1l;可以成立。但是long c = 1f就不能成立。
作者: chudaming213    时间: 2014-12-8 23:40
Dark_Knight 发表于 2014-12-8 23:36
我明白了 谢谢,大神的笔记好像有个地方写错了,long——>float才对吧,我试过了float c = 1l;可以成立。 ...

恩,就是为了确保精度
作者: quick3g    时间: 2014-12-9 00:57
二楼正解呀。
作者: abathe    时间: 2014-12-9 09:28
byte:一字节(8位)   
short:两字节(16位)
int:四字节(32位)(一个字长)
long:八字节(64位)
float:四字节(32位)
double:八字节(64位)
从上往下,由低级向高级依此排序;
当运算中涉及到进制转换时,低级向高级转可以自动完成,高级向低级转则需要强制转(如输出65的ASCII码:char(65))
作者: lwh316658735    时间: 2014-12-9 09:50
你可以按各个类型的取值范围去理解
作者: zhouli_2014    时间: 2014-12-9 10:19
。。。。路过
作者: only是爱    时间: 2015-8-15 23:18

是不是因为byte和char,short体现到屏幕上都是两个字节,所以byte已经被提升了,所以他们是同一级的




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2