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

本文详细阐述了Java中不同类型间隐式转换的情况,包括算术运算符如取正负、自增自减,以及byte、short、char、float、double等类型的具体数值范围。通过实例和计算机原理,讲解了不同数值类型如何影响运算结果。
摘要由CSDN通过智能技术生成

大家都知道,在进行运算时,java会隐式的自动进行类型转化,那么有哪些情况会进行转化呢?总结如下: 一、算术运算符 单目运算符:+(取正)-(取负) ++(自增1) --(自减1) 1.1 +(取正)-(取负) 当操作数是byte,short,char时,会自动转化为int类型;返

遇到过很多关于 数值类型范围的问题了,在这做一个总结,我们可以从多方面理解不同数值类型的所能表示的数值范围 在这里我们只谈论 java中的数值类型 首先说byte: 这段是摘自jdk中 Byte.java中的源代码: view plaincopy to clipboardprint? 01./**

02.

* A constant holding the minimum value a byte can

03.

* have, -27.

04.

*/

05.

public static final byte

MIN_VALUE = -128;

06.

07.

/**

08.

* A constant holding the maximum value a byte can

09.

* have, 27-1.

10.

*/

11.

public static final byte

MAX_VALUE = 127;

/**

* A constant holding the minimum value a byte can

* have, -27.

*/

public static final byte

MIN_VALUE = -128;

/**

* A constant holding the maximum value a byte can

* have, 27-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.

* char, '\u0000'.

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.

* char, '\uFFFF'.

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

* char, '\u0000'.

*

* @since

1.0.2

*/

public static final char

MIN_VALUE = '\u0000';

/**

* The constant value of this field is the largest value of type

* char, '\uFFFF'.

*

* @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.

* float, (2-2-23)·2127.

04.

* It is equal to the hexadecimal floating-point literal

05.

* 0x1.fffffeP+127f and also equal to

06.

* Float.intBitsToFloat(0x7f7fffff).

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.

* float, 2-149. It is equal to the

13.

* hexadecimal floating-point literal 0x0.000002P-126f

14.

* and also equal to Float.intBitsToFloat(0x1).

15.

*/

16.

public static final float MIN_VALUE = 1.4e-45f; // 0x0.000002P-126f

/**

* A constant holding the largest positive finite value of type

* float, (2-2-23)·2127.

* It is equal to the hexadecimal floating-point literal

* 0x1.fffffeP+127f and also equal to

* Float.intBitsToFloat(0x7f7fffff).

*/

public static final float MAX_VALUE = 3.4028235e+38f; // 0x1.fffffeP+127f

/**

* A constant holding the smallest positive nonzero value of type

* float, 2-149. It is equal to the

* hexadecimal floating-point literal 0x0.000002P-126f

* and also equal to Float.intBitsToFloat(0x1).

*/

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.

* double,

04.

* (2-2-52)·21023.

It is equal to

05.

* the hexadecimal floating-point literal

06.

* 0x1.fffffffffffffP+1023 and also equal to

07.

* Double.longBitsToDouble(0x7fefffffffffffffL).

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.

* double, 2-1074. It is equal to the

14.

* hexadecimal floating-point literal

15.

* 0x0.0000000000001P-1022 and also equal to

16.

* Double.longBitsToDouble(0x1L).

17.

*/

18.

public static final double MIN_VALUE = 4.9e-324; // 0x0.0000000000001P-1022

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值