Java基本数据类型

2019/06/07 JAVA

Java基本数据类型

1.基本数据类型所占字节数

基本数据类型 字节数
byte 1
char 2
short 2
int 4
long 8
float 4
double 8
boolean 不确定

2.float,double在内存空间中的存储格式

浮点数的存储格式遵循IEEE_754 标准,一个浮点数由两部分组成,底数m和指数e。float为单精度,double为双精度。

2.1 float的存储格式

  • 格式:

    SEEEEEEE EFFFFFFF FFFFFFFF FFFFFFFF

    S表示浮点数正负,0表述正数,1表示负数;

    E表示指数,占用8bit(1个字节)的二进制数(数值范围为0-255),由于指数可正可负,所以IEEE_754规定此处算出的次方必须减去127才是真正的指数(偏移值为2^(e-1)-1,也就是2^7-1=127),所以,float类型的指数可从-126到128;

    F表示底数,使用二进制数表示浮点数的实际值,是占用24bit(3个字节)的值,但是最高位始终为1,所以最高位省去,存储中占23bit。

  • 举例(13.3):

    • 转换为二进制数,整数部分模2取余法 ,小数部分乘2取整法 (取整之后余数为零则结束,否则计算到需求的精度为止,也就是说整数部分+小数部分的二进制数为24位)。

      1101.0100 11001100 11001100

    • 将二进制数右移,直到小数点前只剩1位

      1.1010100 11001100 11001100 * 2^3 右移了3位

    • 计算出指数和底数

      指数:因为右移了3位,所以为3+127,二进制数为10000010;

      底数:移动小数点之后,所有的小数点部分,即1010100 11001100 11001100

    • 所以13.3在内存中的存储格式为:

      01000001 01010100 11001100 11001100

2.2 double的存储格式

double为双精度格式,8字节64位,1位符号S,11位指数E,52位底数F。指数部分为-1022到1023,偏移值为2^10-1=1023。

3.boolean类型的大小

《Java虚拟机规范》中:“在Java虚拟机中没有任何供boolean值专用的字节码指令,Java语言表达式所操作的boolean值,在编译之后都使用Java虚拟机中的int数据类型来代替,而boolean数组将会被编码成Java虚拟机的byte数组,每个元素boolean元素占8位”。

所以,boolean有可能为1个字节,也可能是4个字节

  • 声明一个基本类型的变量时,编译后当成int处理,为4个字节;
  • 声明数组类型时,数组中的每个元素占1个字节。

参考:

IEEE_754标准

float数据类型在内存中存储

double类型数据在内存中中存储格式

Search

    Table of Contents