A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© zengaoxd 初级黑马   /  2017-12-27 21:05  /  1030 人查看  /  1 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 zengaoxd 于 2017-12-27 21:09 编辑

基本数据类型[/table]
首先我们要知道,一个字节(byte)等于八位(bit)
现在我们常说的32位操作系统和64位操作系统,它们和基本数据类型没有很直接的关系,这些系统的本质其实依赖于cpu。cpu有32位和64位之分。32位的cpu一次性能处理4个字节的数据量也就是32位的数据量。以此类推64位的cpu能一次处理64位的数据量。操作系统是在此基础上开发的。

下面简单的列出了所有的基本数据类型
        整数类型        字节        取值范围
                byte    1     -128 -- 127
                short   2     -32768(-2^15)~32767(2^15 - 1)
正负大约3万
                int     4     -2,147,483,648(-2^31) ~  2,147,483,647(2^31 - 1);
正负大约21亿
                long    8     -2^63 ~ 2^63 -1
                浮点类型
                float   4     -2^128 ~ +2^128
                double  8     -2^1024 ~ +2^1024
                字符类型
                char    2     0 -- 65535
                布尔类型
                boolean       true   false

值得注意的是,short类型和char类型同样是2字节,但是取值范围不一样。char的最大值更大。
在Java中,char是16bit长的无符号整数,因此范围是:0~65535,而short则是16bit长的带符号整数,范围是-32768~32767。 short数据类型中有一个bit用来表示数据的正负。而char没有相应的bit用于表示正负,char默认为正整数。
所以,两者虽然字长相同,但意义却不一样(表示范围并不完全重合或包含),因此不管是char转换成short,还是short转换成char,都属于数值的“窄化转换”(Narrowing Primitive Conversion)。 窄化转化都可能“丢失精度”,因此必须强制转换。虽然,这里的“丢失精度”跟从int到short的丢失精度给人的感觉似乎不一样,但仔细想想也没有什么区别,一方面,char有16个bit表示数值,而short用于表示数值大小的只有15个bit,因此,从char到short会“丢失数值精度”,而另一方面,short有1个bit表示数值的符号,而char却根本没有这么个符号位(所有的bit都用来表示数值大小了),所以从short到char也可能“丢失精度”,只是这里丢失的是有关正负的“精确程度”。
另外 int 与float 同样都是4字节,long和double同样都是8字节。但是浮点类型范围远远大于整形。这是因为浮点数据并不能精确的表示一个数字,而是近似的表示一个数字。所以浮点型数据存在一个精度问题。
float和double的范围是由指数的位数来决定的。
  float的指数位有8位,而double的指数位有11位,分布如下:
  float:
  1bit(符号位) 8bits(指数位) 23bits(尾数位)
  double:
  1bit(符号位) 11bits(指数位) 52bits(尾数位)
  于是,float的指数范围为-127~+128,而double的指数范围为-1023~+1024,并且指数位是按补码的形式来划分的。
  其中负指数决定了浮点数所能表达的绝对值最小的非零数;而正指数决定了浮点数所能表达的绝对值最大的数,也即决定了浮点数的取值范围。
  float的范围为-2^128 ~ +2^128,也即-3.40E+38 ~ +3.40E+38;double的范围为-2^1024 ~ +2^1024,也即-1.79E+308 ~ +1.79E+308。
float和double的精度是由尾数的位数来决定的。浮点数在内存中是按科学计数法来存储的,其整数部分始终是一个隐含着的“1”,由于它是不变的,故不能对精度造成影响。
  float:2^23 = 8388608,一共七位,这意味着最多能有7位有效数字,但绝对能保证的为6位,也即float的精度为6~7位有效数字;
  double:2^52 = 4503599627370496,一共16位,同理,double的精度为15~16位。

总结:
对于我们来说,详细了解这方面的知识对以后的工作可能用处并不大,但是粗略的记住他们的取值范围还是能起到一些帮助的.

1 个回复

倒序浏览
看得出你对知识有种剖根究底的冲动,希望在后面的知识点掌握之余也都能做到理解深刻!望就业班的学习更加努力!不负此行
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马