`
生死格斗
  • 浏览: 127617 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

java 彻底理解 byte char short int float long double (转)

阅读更多
遇到过很多关于 数值类型范围的问题了,在这做一个总结,我们可以从多方面理解不同数值类型的所能表示的数值范围

在这里我们只谈论 java中的数值类型

首先说byte:

这段是摘自jdk中 Byte.java中的源代码:

view plaincopy to clipboardprint?
01./** 
02.     * A constant holding the minimum value a <code>byte</code> can 
03.     * have, -2<sup>7</sup>. 
04.     */ 
05.    public static final byte   MIN_VALUE = -128;  
06. 
07.    /** 
08.     * A constant holding the maximum value a <code>byte</code> can 
09.     * have, 2<sup>7</sup>-1. 
10.     */ 
11.    public static final byte   MAX_VALUE = 127; 
/**
     * A constant holding the minimum value a <code>byte</code> can
     * have, -2<sup>7</sup>.
     */
    public static final byte   MIN_VALUE = -128;

    /**
     * A constant holding the maximum value a <code>byte</code> can
     * have, 2<sup>7</sup>-1.
     */
    public static final byte   MAX_VALUE = 127;

从这里可以看出 byte的取值范围:-128 --- 127;

从计算机组成原理的角度可以解释:byte在计算机中是占8位的 而且byte 是有符号整形 用二进制表示时候最高位为符号位 0代表正数 1代表负数。

最大值:127      0111 1111 即2的7次方减去1;

最小值:-128 这个数字曾经困扰我很久, 要知道正数在计算机中是以原码形式存在的,负数在计算机中是以其补码形式存在的,那么一个负数的补码是怎么计算的呢? 就是负数的绝对值的原码转为二进制再按位取反后加1,

下边这个10和-10为例来介绍的 :10原码:0000 1010   它在计算机中的存储就是 0000 1010, 那么-10呢? 按照前面说的 算除其绝对值为10,转为二进制 0000 1010 按位取反 1111 0101 再加1后:1111 0110,此为-10补码 ,好的,计算机中的1111 0110就是代表-10了。

我们来看 -128  绝对值128的二进制表示:1000 0000 按位取反 0111 1111 加1后:1000 0000,也就是说 -128在计算机中的表示就是 1000 0000 了, 再来看一下-129 在计算机中的表示,绝对值129的范围已经超出了了byte的位数。

再有还可以通过

view plaincopy to clipboardprint?
01.System.out.println(Byte.MAX_VALUE); //最大值  
02.        System.out.println(Byte.MIN_VALUE); //最小值 
System.out.println(Byte.MAX_VALUE); //最大值
System.out.println(Byte.MIN_VALUE); //最小值

输出Byte的最大值和最小值。

综上所述 byte的取值范围只能是:-128 -- 127了  即 负的2的7次方到2的7次方减去1。

相应的 short 作为16位有符号整形,int作为32位有符号整形,  long 作为64位有符号整形 都可以如上计算出 取值范围

char作为16位无符号整形 其范围为 0 -- 2的15次方 这无可争议

摘自 Character.java中的源代码:

view plaincopy to clipboardprint?
01./** 
02.     * The constant value of this field is the smallest value of type 
03.     * <code>char</code>, <code>'\u0000'</code>. 
04.     * 
05.     * @since   1.0.2 
06.     */ 
07.    public static final char   MIN_VALUE = '\u0000';  
08. 
09.    /** 
10.     * The constant value of this field is the largest value of type 
11.     * <code>char</code>, <code>'\uFFFF'</code>. 
12.     * 
13.     * @since   1.0.2 
14.     */ 
15.    public static final char   MAX_VALUE = '\uffff'; 
/**
     * The constant value of this field is the smallest value of type
     * <code>char</code>, <code>'\u0000'</code>.
     *
     * @since   1.0.2
     */
    public static final char   MIN_VALUE = '\u0000';

    /**
     * The constant value of this field is the largest value of type
     * <code>char</code>, <code>'\uFFFF'</code>.
     *
     * @since   1.0.2
     */
    public static final char   MAX_VALUE = '\uffff';

float作为32位的浮点型:

摘自Float.java源码:

view plaincopy to clipboardprint?
01./** 
02.     * A constant holding the largest positive finite value of type 
03.     * <code>float</code>, (2-2<sup>-23</sup>)·2<sup>127</sup>. 
04.     * It is equal to the hexadecimal floating-point literal 
05.     * <code>0x1.fffffeP+127f</code> and also equal to 
06.     * <code>Float.intBitsToFloat(0x7f7fffff)</code>. 
07.     */ 
08.    public static final float MAX_VALUE = 3.4028235e+38f; // 0x1.fffffeP+127f  
09. 
10.    /** 
11.     * A constant holding the smallest positive nonzero value of type 
12.     * <code>float</code>, 2<sup>-149</sup>. It is equal to the 
13.     * hexadecimal floating-point literal <code>0x0.000002P-126f</code> 
14.     * and also equal to <code>Float.intBitsToFloat(0x1)</code>. 
15.     */ 
16.    public static final float MIN_VALUE = 1.4e-45f; // 0x0.000002P-126f 
/**
     * A constant holding the largest positive finite value of type
     * <code>float</code>, (2-2<sup>-23</sup>)·2<sup>127</sup>.
     * It is equal to the hexadecimal floating-point literal
     * <code>0x1.fffffeP+127f</code> and also equal to
     * <code>Float.intBitsToFloat(0x7f7fffff)</code>.
     */
    public static final float MAX_VALUE = 3.4028235e+38f; // 0x1.fffffeP+127f

    /**
     * A constant holding the smallest positive nonzero value of type
     * <code>float</code>, 2<sup>-149</sup>. It is equal to the
     * hexadecimal floating-point literal <code>0x0.000002P-126f</code>
     * and also equal to <code>Float.intBitsToFloat(0x1)</code>.
     */
    public static final float MIN_VALUE = 1.4e-45f; // 0x0.000002P-126f

double 作为64为浮点型

Double.java源码:

view plaincopy to clipboardprint?
01./** 
02.     * A constant holding the largest positive finite value of type 
03.     * <code>double</code>, 
04.     * (2-2<sup>-52</sup>)·2<sup>1023</sup>.  It is equal to 
05.     * the hexadecimal floating-point literal 
06.     * <code>0x1.fffffffffffffP+1023</code> and also equal to 
07.     * <code>Double.longBitsToDouble(0x7fefffffffffffffL)</code>. 
08.     */ 
09.    public static final double MAX_VALUE = 1.7976931348623157e+308; // 0x1.fffffffffffffP+1023  
10. 
11.    /** 
12.     * A constant holding the smallest positive nonzero value of type 
13.     * <code>double</code>, 2<sup>-1074</sup>. It is equal to the 
14.     * hexadecimal floating-point literal 
15.     * <code>0x0.0000000000001P-1022</code> and also equal to 
16.     * <code>Double.longBitsToDouble(0x1L)</code>. 
17.     */ 
18.    public static final double MIN_VALUE = 4.9e-324; // 0x0.0000000000001P-1022
分享到:
评论

相关推荐

    java实现的字节数组转换成基本类型,基本类型转换成byte[]

    char short int long float double 转换成byte数组

    java基本类型与byte数组互相转换.pdf

    double 类型是 64 位的浮点数类型,转换成 byte 数组需要将 double 类型转换成 long 类型,然后将 long 类型转换成 byte 数组。例如: ```java public static byte[] doubleToByteArr(double param) { byte[] b = ...

    java代码-1·byte short int 在计算是会自动转化为int 2.float double 为近似值,byte short int 转化时可能会精确丢失 3.把大类型转化小的类型时可能会丢失

    在Java中,有五种整数类型:byte、short、int、long和char。当这些类型之间进行算术运算时,较小的类型(byte、short)会被提升到较大的类型(通常是int)来进行计算。这是Java的隐式类型转换规则之一,确保所有的...

    java 举例分析 equals hashcode 基本类型与基本对象的比较 shot与Short int与Integer long与Long

    举例分析 equals 和 hashcode 方法,hashcode应该怎么样生成 8个基本类型与基本对象的比较:byte与Byte shot与Short int与Integer long与Long float与Float double与Double char与Character

    java之java类型转换

    Java 中的简单类型包括 boolean、byte、char、short、int、long、float、double 和 void 八种类型,每种类型都有其对应的封装器类,如 Boolean、Byte、Character、Short、Integer、Long、Float、Double 和 Void。...

    java基本类型与byte数组互相转换

    在Java编程语言中,基本类型的变量(如`short`、`int`、`long`、`char`、`double`和`float`)和`byte`数组之间的相互转换是一项非常实用的技术,尤其是在网络通信、文件读写等场景下。下面将详细介绍如何进行这些...

    java基本类型与byte数组互相转换.doc

    Java基本类型是指Java语言中最基本的数据类型,包括byte、short、int、long、float、double、char、boolean等。这些基本类型在内存中以二进制形式存储,而byte数组是Java中的一种数据结构,用于存储一组byte类型的...

    long 和 int 的相互转换.docx

    原始数据类型包括byte、short、int、long、float、double、char和boolean,而引用数据类型则包括类(class)、接口(interface)和数组。在处理数值计算时,我们可能需要在不同数据类型之间进行转换,特别是当涉及到long...

    java基本类型与byte数组互相转换文.pdf

    Java 中的基本类型包括 boolean、byte、char、short、int、long、float 和 double 等。这些基本类型可以相互转换,例如将 short 类型转换成 byte 数组、int 类型转换成 byte 数组等。 在 Java 中,基本类型可以...

    java类型转换.pdf

    简单类型包括boolean、byte、char、short、int、long、float和double,以及void。这些简单类型占用了固定的二进制位数,不受机器架构的影响,从而确保了代码的可移植性。Java还为每个简单类型提供了一个对应的封装器...

    谈谈Java中整数类型(short int long)的存储方式

    Java中数据类型的转换顺序是从byte、short、char到int,然后依次是long、float和double,这种顺序被称为类型提升。 需要注意的是,类型转换可能引发溢出问题。例如,当一个大于int最大值的long值尝试转换为int时,...

    Java就业面试笔试题资料-264道.zip

    Java 有8种基本数据类型: byte int short long double float Boolean char byte int short long 都属于整数类型. Double float 属于浮点类型. Boolean 为布尔类型 Char 为字符型 String 不是基本数据类型.它定义的...

    条件运算符中的细节

    返回值的类型 往两者类型大的方向转(byte&lt;short&lt;int&lt;float&lt;long) //特殊情况(含char类型) char和一个byte/short/int 结果为 int char和一个float/double 结果为float/double 二 表达式2和表达式3都是常量: ...

    java中数据类型转换.doc

    例如,byte、short、char可以自动转换为int,int可以转换为long,float和long可以转换为double。 ```java byte b = 10; int i = b; // 自动类型转换 ``` - **强制类型转换(向下转型)**:从高级数据类型...

    Java中几种常用数据类型之间转换的方法

    在 Java 中,可以使用 parseInt()、parseFloat()、parseLong() 和 parseDouble() 方法将 String 类型的变量转换为 int、float、long 和 double 类型的变量。例如: String intstring = "10"; String floatstring = ...

    java数据类型的转换简单数据类型之间的转换 (2). 字符串与其它数据类型的转换 (3). 其它实用数据类型转换

    一些初学JAVA的朋友可能会遇到JAVA的数据类型之间转换的苦恼,例如,整数和float,double型之间的转换,整数和String类型之间的转换,以及处理、显示时间方面的问...byte、short、int、long;浮点型float、double。其

    Java企业面试问题2.txt

    2.1java中的8种基本数据类型:boolean byte char short int float double long 2.2:基本数据类型和它对应的封装类型之间可以相互转换,从基本数据类型到封装类 型叫做装箱,从封装类型到基本数据类型叫拆箱,...

    JAVA类型转换.pdf

    基本类型包括布尔型(boolean)、字符型(char)、整型(byte, short, int, long)和浮点型(float, double),而引用类型主要包括类(Class)、接口(Interface)以及数组。 ### 数据类型转换的种类 1. **简单...

    Java基本类型转换.doc

    数值型又分为整型(byte、short、int、long)和浮点型(float、double)。在转换过程中,遵循从低精度到高精度的自动转换和从高精度到低精度的强制转换。 - 自动类型转换:较低精度的类型可以直接赋值给较高精度的...

    java彻底理解bytecharshortintfloatlongdouble.doc

    本文将深入探讨Java中的`byte`、`char`、`short`、`int`、`float`、`long`和`double`这些基本数据类型的特性和用法。 首先,我们来看整型数据类型: 1. `byte`: 占用1个字节(8位),取值范围从-128到127。 2. `...

Global site tag (gtag.js) - Google Analytics