Java中8个基础类型以及其存储

背景

作为科班出身,又写了几年的Java,被一个老弟的一个问题难住了,问: 1/10.0的小数为什么不能用二进制完整表示?
思考了很久,发现自己已经把最基本的东西忘记了,这里回顾一下,最后再回答这个问题。

8种基础类型

首先占用空间的大小从小到大来介绍一下java的8种基础类型。

类型类型说明默认值取值范围占用空间(位数)举例说明
byte字节0-2^7 - 2^7-18byte b = 10;
boolean布尔型falsefalse, true未知(虚拟机规范是4字节,也可能是1字节)boolean b = false;
char字符0 - 2^16-116char c = ‘a’;
short短整数0-2^15 - 2^15-116short s = 1;
int整数0-2^31 - 2^31-132int i = 12;
float单精度小数0.01.4e-45f - 3.4028235e+38f32float f = 12.0F;
long长整数0-2^63 - 2^63-164long l = 12L;
double双精度小数0.04.9e-324 - 1.7976931348623157e+30864double d = 12.0;

写一段代码验证一个表格里的说明。

public class BasicData {
    static byte b;
    static short s;
    static int i;
    static long l;
    static float f;
    static double d;
    static char c;
    static boolean bo;

    public static void main(String[] args) {

        System.out.println("byte的大小:" + Byte.SIZE
            + ";默认值:" + b
            + ";数据范围:" + Byte.MIN_VALUE + " - " + Byte.MAX_VALUE);

        System.out.println("boolean的大小:未知;默认值:" + bo
            + ";数据范围:" + Boolean.FALSE + " - " + Boolean.TRUE);

        System.out.println("char的大小:" + Character.SIZE
            + ";默认值:" + c
            + ";数据范围:" + Character.MIN_VALUE + " - " + Character.MAX_VALUE);

        System.out.println("short的大小:" + Short.SIZE
            + ";默认值:" + s
            + ";数据范围:" + Short.MIN_VALUE + " - " + Short.MAX_VALUE);

        System.out.println("int的大小:" + Integer.SIZE
            + ";默认值:" + i
            + ";数据范围:" + Integer.MIN_VALUE + " - " + Integer.MAX_VALUE);

        System.out.println("float的大小:" + Float.SIZE
            + ";默认值:" + f
            + ";数据范围:" + Float.MIN_VALUE + " - " + Float.MAX_VALUE);

        System.out.println("long的大小:" + Long.SIZE
            + ";默认值:" + l
            + ";数据范围:" + Long.MIN_VALUE + " - " + Long.MAX_VALUE);

        System.out.println("double的大小:" + Double.SIZE
            + ";默认值:" + d
            + ";数据范围:" + Double.MIN_VALUE + " - " + Double.MAX_VALUE);

        System.out.println(-2 % 12);
    }

输出的结果:

byte的大小:8;默认值:0;数据范围:-128 - 127
boolean的大小:未知;默认值:false;数据范围:false - true
char的大小:16;默认值:;数据范围: - 
short的大小:16;默认值:0;数据范围:-32768 - 32767
int的大小:32;默认值:0;数据范围:-2147483648 - 2147483647
float的大小:32;默认值:0.0;数据范围:1.4E-45 - 3.4028235E38
long的大小:64;默认值:0;数据范围:-9223372036854775808 - 9223372036854775807
double的大小:64;默认值:0.0;数据范围:4.9E-324 - 1.7976931348623157E308

下面分别介绍一下每个数据类型在内存中的存储方式,在介绍之前先温习一下什么是补码原码反码,具体可以看这个博客:

https://www.cnblogs.com/wqbin/p/11142873.html

下面的标识都是以补码的形式表示,因为内存中也是补码。

byte

举个例子

10进制: 8
二进制: 00001000

最大值

十进制: 127
二进制: 01111111

最小值

十进制: -128
二进制: 111111111

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值