zoukankan      html  css  js  c++  java
  • Java基本数据类型

    Java基本数据类型

    在Java中共有八种基本数据类型如下表

    类型 所占字节
    char 2
    boolean 4(1)
    byte 1
    short 2
    int 4
    long 8
    float 4
    double 8

    可以把八种数据类型按照字符型、布尔型、数值型分为三组

    字符型

    char类型所占的字节数为2个字节,通过如下代码可以查看

    System.out.println(Character.BYTES) // 2
    

    1 字节 = 8 位,计算机存储的数据都以二进制来表示,所以char类型在计算机内表示为16位二进制

    布尔型

    boolean类型所占的字节数大小有两种情况

    虽然定义了boolean这种数据类型,但是只对它提供了非常有限的支持。在Java虚拟机中没有任何供boolean值专用的字节码指令,Java语言表达式所操作的boolean值,在编译之后都使用Java虚拟机中的int数据类型来代替,而boolean数组将会被编码成Java虚拟机的byte数组,每个元素boolean元素占8位 --《Java虚拟机规范》

    所以单个boolean变量所占的是4个字节,boolean数组中的元素占一个字节。

    数值型

    整数型

    整数型包括byte、short、int、long,最高位符号位表示正负。

    byte

    byte类型占一个字节

    System.out.println(Byte.BYTES)   // 1
    

    一个字节就是八位二进制,最高位代表正负,0正1负。

    所以byte所表示的整数范围为 -128~127。

    这个数字是怎么来的呢,首先我们先得了解一个知识,计算机里存储得二进制都是补码,正数补码的原码就是它本身,负数补码的原码是取反再+1,所求的的数值为负值的绝对值。所以正数最大的就是除了最高位符号位为0外其余部份都为1,二进制表示为01111111十进制值为127,负数最小的值就应该为10000000 取反得到 01111111 +1得到 10000000 因为是负数所以值为-128,因为要取反所以除符号位都为0才能得到绝对值最大的值,进而获得负数最小值。

    short

    short类型占两个子节

    System.out.println(Short.BYTES)  // 2
    

    两个字节就是十六位二进制,同样最高位表示正负。

    所以short所表示的整数范围为 -32768~32767。

    求法同byte

    int

    int类型占四个字节

    System.out.println(Integer.BYTES) // 4
    

    四字节就是三十二位二进制,同样最高位表示正负。

    所以int所表示的整数范围为-2,147,483,648~2,147,483,647。

    求法同byte

    long

    long类型占八个字节

    System.out.println(Long.BYTES) // 8
    

    八字节就是六十四位二进制,同样最高位表示正负。

    long表示的正数范围为-9,223,372,036,854,775,808~9,223,372,036,854,775,807

    求法同byte

    范围公式

    二进制位数为n 范围为 -2^(n-1) ~ 2^(n-1)-1

    浮点型

    浮点型也就是小数类型包括float、double,用二进制来存储十进制的小数是无法精确存储的。浮点数存储的时候分为三部分,分别是符号位、指数位(以2为底)、尾数位(位数为省略开头的1),浮点数的精度由尾数尾所决定。

    float

    float类型占四个子节

    System.out.println(Float.BYTES) // 4
    

    四字节就是三十二位,1位符号位8位指数位23位尾数位。

    所表示的范围算起来有点复杂,这里就不算了-_-。

    float所表示的范围是大于long的,虽然long是八个字节,但是由于存储结构的不同,四字节的float确实的范围是大于long的,主要体现在指数位。

    double

    double类型占8个子节

    System.out.println(Double.BYTES) // 8
    

    八字节六十四位,1位符号位11位指数位52位尾数位,精度高于float,所以一般说float是单精度,double是双精度。

    总结

    Java语言由于JVM虚拟机的存在,基本数据类型所占的字节数都是固定不变的,本文主要是简介,如有需要精确计算浮点数范围的请查找专业文献。

  • 相关阅读:
    deleted
    deleted
    deleted
    deleted
    deleted
    deleted
    deleted
    CF #505 B Weakened Common Divisor(数论)题解
    HDU 6425 Rikka with Badminton(组合问题签到)题解
    ZOJ 2747 Paint the Wall(离散化+暴力)题解
  • 原文地址:https://www.cnblogs.com/ljsh/p/12988477.html
Copyright © 2011-2022 走看看