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

Java基础知识——3.数据类型,第1张

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 ~ 127short162-32768 ~ 32767int324-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 = 1024B1MB=2^10KB = 1024KB1GB=2^10MB = 1024MB1TB=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个字节。

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

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/zaji/5686785.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-17
下一篇 2022-12-17

发表评论

登录后才能评论

评论列表(0条)

保存