目录
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种整型,详细信息见下表:
补充:计算机存储信息的最小单位称之为位,又称为比特,记为bit,1bit数就是1个二进制数,如:10101B 就是5比特数;
存储器中,所包含存储单元的数量称为存储容量,存储容量的基本单位是字节(Byte,简记为B),8个比特(二进制数)记为一个字节,除字节外,还有 KB , MB , GB , TB,它们之间的转换关系如下表
存储实质:
例如:有如下语句:
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提供了两种浮点型,详细信息见下表
注意: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型问:bool类型变量的取值只有0与1两种,1比特就够了,为什么要用4个字节来存储?
答:见下方
计算机的最小存储单元就是1个字节,即使存1比特数据存储数也需要消耗一个字节(其实由于 *** 作系统,实际需要4KB空间),计算机中数据由内存往cpu传递时需要经过高速缓存,高速缓存是有分块的,每块64个字节大小,每块中可以存放许多份数据,而数据的传输是靠高低电压,数据小,份额多,那么传输次数就增多,堵塞的概率就变大,数据大 ,份额少,传输次数少,堵塞概率小,为了降低堵塞概率,那么数据份额就多,则每份所占的内存就大,所以bool类型占4个字节。
上述内容,如有不当,敬请指出!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)