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

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

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

 首先说byte:

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

/** * 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的位数。

再有还可以通过

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中的源代码:

/** * 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源码:

/** * 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源码:

/** * A constant holding the largest positive finite value of type * <code>double</code>, * (2-2<sup>-52</sup>)·2<sup>1023</sup>. It is equal to * the hexadecimal floating-point literal * <code>0x1.fffffffffffffP 1023</code> and also equal to * <code>Double.longBitsToDouble(0x7fefffffffffffffL)</code>. */ public static final double MAX_VALUE = 1.7976931348623157e 308; // 0x1.fffffffffffffP 1023 /** * A constant holding the smallest positive nonzero value of type * <code>double</code>, 2<sup>-1074</sup>. It is equal to the * hexadecimal floating-point literal * <code>0x0.0000000000001P-1022</code> and also equal to * <code>Double.longBitsToDouble(0x1L)</code>. */ public static final double MIN_VALUE = 4.9e-324; // 0x0.0000000000001P-1022

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Java中提供了以下方法可以进行类型之间的转换: 1. 将基本数据类型转换为字符串: ```java byte b = 1; String strByte = Byte.toString(b); // byte 转换为字符串 short s = 2; String strShort = Short.toString(s); // short 转换为字符串 int i = 3; String strInt = Integer.toString(i); // int 转换为字符串 long l = 4L; String strLong = Long.toString(l); // long 转换为字符串 float f = 5.0f; String strFloat = Float.toString(f); // float 转换为字符串 double d = 6.0; String strDouble = Double.toString(d); // double 转换为字符串 char c = 'a'; String strChar = Character.toString(c); // char 转换为字符串 boolean bool = true; String strBool = Boolean.toString(bool); // boolean 转换为字符串 ``` 2. 将字符串转换为基本数据类型: ```java String str = "123"; byte b = Byte.parseByte(str); // 字符串转换为 byte short s = Short.parseShort(str); // 字符串转换为 short int i = Integer.parseInt(str); // 字符串转换为 int long l = Long.parseLong(str); // 字符串转换为 long float f = Float.parseFloat(str); // 字符串转换为 float double d = Double.parseDouble(str); // 字符串转换为 double char c = str.charAt(0); // 字符串转换为 char boolean bool = Boolean.parseBoolean(str); // 字符串转换为 boolean ``` 需要注意的是,在进行字符串转换成基本数据类型的时候,如果字符串的格式不符合相应数据类型的规范,会抛出NumberFormatException异常。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值