栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Java基础知识——3.数据类型

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Java基础知识——3.数据类型

目录

3.1由来

3.2概述

3.3整型

3.4浮点型

 3.4字符型

3.5bool型


3.1由来

       写程序与做数学题类似,在数学题中有这样的语句“设X属于R”,它表明X是R类型的数,而不是复数,而Java作为一种强类型语言,它就需要对每个变量进行类型声明,由此引出数据类型

3.2概述

       为了可以表示所有的数据,Java规定了8种基本数据类型,分别为:byte , short , int , long (四种整型)可以用来定义整数类型的数据;float , double(两种浮点型)可以用来定义小数类型的数据;char(字符型)可以用来定义字符类型的数据;boolean(bool型,只有true与false两种取值情况)可以用来定义布尔类型的数据。

3.3整型

整型用来表示没有小数部分的数值,它可以是负数,Java提供了4种整型,详细信息见下表:

类型比特数存储需求(字节数)                      范围                      
byte81-128 ~ 127
short162-32768 ~ 32767
int324-2^31 ~ 2^31-1(正好超过20亿)
long648-2^63 ~ 2^63

补充:计算机存储信息的最小单位称之为位,又称为比特,记为bit,1bit数就是1个二进制数,如:10101B 就是5比特数;

存储器中,所包含存储单元的数量称为存储容量,存储容量的基本单位是字节(Byte,简记为B),8个比特(二进制数)记为一个字节,除字节外,还有 KB , MB , GB , TB,它们之间的转换关系如下表

1KB=2^10B = 1024B
1MB=2^10KB = 1024KB
1GB=2^10MB = 1024MB
1TB=2^10GB = 1024GB

存储实质:

例如:有如下语句:

byte x = 34 ;

在存储时,内存开辟1字节的存储空间,存下34的二进制数:10010 并将其补全至8位,即存储 0 010 0010 ,其中最高位为符号位,0代表它为正,1代表它为负。若语句改为:

byte x = -34 ;

计算机会先求它的原码,即1010 0010,再求它的反码,即1101 1101 最后存储它的补码,即1101 1110 (关于进制转换,原码,反码,补码的问题可以去看我的另一篇文章)。若语句改为:byte x = 256 ; 则超出范围,计算机在编译时会报错。

牢记:正数存原码,负数存补码,正数原码等于补码。

3.4浮点型

问:小数如何用二进制数表示?

答:例如:0.125 = 2^(-5),即用x^(-y)可以表示小数

浮点型用于表示有小数部分的数值,它可以是负数,Java提供了两种浮点型,详细信息见下表

类型比特数存储需求(字节数)范围
float324大约 3.402 823 47E+38F(有效位数6 ~ 7位)
 double648大约 1.797 693 134 862 315 70E+308(有效位数15位)

注意:float 有效位数6 ~ 7位数值越大,损失越多,越不精确

问:float 与 int 同占4B,二者范围为何相差那么大?

答:看下方存储实质

存储实质:

注意:float无法表示所有小数,因为精度特别高的就无法用x,y组合表示了

问:为何用float定义某些数据时,输出的与原数据值不同

答:见下方

假设:float类型的值 即( 2^(x-127) )*y 只能表示下面的这些数(结合表达式的特点)

-15000          -5000          -500          -10          0           10           500           5000          15000

现在有语句:float a = 80 ;而80无法用float表达式表示,于是在其表达式所能表示的数据中选出最接近80的数据赋予a,即 a = 10

(上述均为假设,只为说明其原理,数值的举例不可当真)

对比 int 与 float 的精度问题

int 在数轴上是等距排列的,而 float 根据其表达式( 2^(x-127) )*y ,可知在0附近排列密集,数越大排列越稀疏,所以 float 在0附近精度高(比int 高),离0越远精度越低

double(双精度浮点型)存储实质:

3.4字符型

表示字符的变量可以用 char 定义,赋初值时要用 ' ' (注意与String的区别)引起字符,例如:

char a = 'a';

字符型变量所占的内存由编码决定,一般有 8比特,16比特,32比特 三种,关于编码,可以看我的另外一篇文章

3.5bool型
类型比特数所需内存(字节数)范围
boolean324      true      或    false      

问:bool类型变量的取值只有0与1两种,1比特就够了,为什么要用4个字节来存储?

答:见下方

计算机的最小存储单元就是1个字节,即使存1比特数据存储数也需要消耗一个字节(其实由于操作系统,实际需要4KB空间),计算机中数据由内存往cpu传递时需要经过高速缓存,高速缓存是有分块的,每块64个字节大小,每块中可以存放许多份数据,而数据的传输是靠高低电压,数据小,份额多,那么传输次数就增多,堵塞的概率就变大,数据大 ,份额少,传输次数少,堵塞概率小,为了降低堵塞概率,那么数据份额就多,则每份所占的内存就大,所以bool类型占4个字节。

上述内容,如有不当,敬请指出!

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/686238.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号