1.java数值类图
2.Integer类
- Integer存储时使用的字节数
// Bit twiddling
/**
* The number of bits used to represent an {@code int} value in two's
* complement binary form.
*
* @since 1.5
*/
public static final int SIZE = 32;
由java源码可以得知Integer存储时所占用的字节数为4个字节。
- java中整数的存储方式为补码的方式存储。
- 正整数的补码就是原码。例如4 原码100B;补码:100B
- 负整数的补码为符号位不变,原码取反加一 例如:-4 原码 10000100B ;补码11111100B
- 依据是根据下面原码得出:
*
* @return an {@code int} value with a single one-bit, in the position
* of the lowest-order one-bit in the specified value, or zero if
* the specified value is itself equal to zero.
* @since 1.5 求出一个整数的最低位字节
*/
public static int lowestOneBit(int i) {
// HD, Section 2-1
return i & -i; //这里只用了&操作所以可以判断得出java存储整数的方式是补码的方式。
}
3.Short类
- Short类存储时占用的字节数
/**
* The number of bits used to represent a {@code short} value in two's
* complement binary form.
* @since 1.5
*/
public static final int SIZE = 16;
由源码可以得知short占用的字节数为2个字节。
4.Byte类
- Byte类所占用的字节数
/**
* The number of bits used to represent a {@code byte} value in two's
* complement binary form.
*
* @since 1.5
*/
public static final int SIZE = 8;
由源码可以得知Byte占用的字节数为1个字节。
5.Double类
- Double类型所占用的字节数
/**
* The number of bits used to represent a {@code double} value.
*
* @since 1.5
*/
public static final int SIZE = 64;
由源码可以得知doule类型所占用的内存的字节数为8个字节。
- double双精度数据类型存储格式
double类型存储由三部分组成:
(1)符号位s站1个bit;
(2)指数位e为11个bit;
(3)小数位f为52位bit;
其中还有偏移附加值为:1023;
实际指数的值 = 指数部分的值-偏移附加值
例如:2.5的存储:
(1)整数部分:2的二进制位 10B
(2)小数部分为:0.1B
所以整体的二进制位:10.1B;由于double类型的小数部分占52位;所以2.5在内存中小数的表示方式为f=0100000000000000000000000000000000000000000000000000B(后面50个0);大家可能会疑惑前面的1那里去了其实在java中默认的整数位为1所以干脆省略掉,提供多一位的bit给小数位从而提高精度;那么指数位为1;所以我们可以算出double类型的指数e = 1023 + 1 即10000000000B;符号位s:0B;综上所述:我们可以得到2.5在java存储的内容为0 10000000000 0100000000000000000000000000000000000000000000000000B
Float类
- Float类型在所占用的bit数
/**
* The number of bits used to represent a {@code float} value.
*
* @since 1.5
*/
public static final int SIZE = 32;
由此可以看出占用的字节数为:4
– Float单精度数据类型存储格式
float类型存储由三部分组成:
(1)符号位s站1个bit;
(2)指数位e为8个bit;
(3)小数位f为23位bit;
其中还有偏移附加值为:127;
实际指数的值 = 指数部分的值-偏移附加值