java基本类型二进制详解

public static void main( String[] args )
    {
    	// byte   
        System.out.println("基本类型:byte 二进制位数:" + Byte.SIZE);   
        System.out.println("包装类:java.lang.Byte");   
        System.out.println("最小值:Byte.MIN_VALUE=" + Byte.MIN_VALUE);   
        System.out.println("最大值:Byte.MAX_VALUE=" + Byte.MAX_VALUE);   
        System.out.println();   
  
        // short   
        System.out.println("基本类型:short 二进制位数:" + Short.SIZE);   
        System.out.println("包装类:java.lang.Short");   
        System.out.println("最小值:Short.MIN_VALUE=" + Short.MIN_VALUE);   
        System.out.println("最大值:Short.MAX_VALUE=" + Short.MAX_VALUE);   
        System.out.println();   
  
        // int   
        System.out.println("基本类型:int 二进制位数:" + Integer.SIZE);   
        System.out.println("包装类:java.lang.Integer");   
        System.out.println("最小值:Integer.MIN_VALUE=" + Integer.MIN_VALUE);   
        System.out.println("最大值:Integer.MAX_VALUE=" + Integer.MAX_VALUE);   
        System.out.println();   
  
        // long   
        System.out.println("基本类型:long 二进制位数:" + Long.SIZE);   
        System.out.println("包装类:java.lang.Long");   
        System.out.println("最小值:Long.MIN_VALUE=" + Long.MIN_VALUE);   
        System.out.println("最大值:Long.MAX_VALUE=" + Long.MAX_VALUE);   
        System.out.println();   
  
        // float   
        System.out.println("基本类型:float 二进制位数:" + Float.SIZE);   
        System.out.println("包装类:java.lang.Float");   
        System.out.println("最小值:Float.MIN_VALUE=" + Float.MIN_VALUE);   
        System.out.println("最大值:Float.MAX_VALUE=" + Float.MAX_VALUE);   
        System.out.println();   
  
        // double   
        System.out.println("基本类型:double 二进制位数:" + Double.SIZE);   
        System.out.println("包装类:java.lang.Double");   
        System.out.println("最小值:Double.MIN_VALUE=" + Double.MIN_VALUE);   
        System.out.println("最大值:Double.MAX_VALUE=" + Double.MAX_VALUE);   
        System.out.println();   
  
        // char   
        System.out.println("基本类型:char 二进制位数:" + Character.SIZE);   
        System.out.println("包装类:java.lang.Character");   
        // 以数值形式而不是字符形式将Character.MIN_VALUE输出到控制台   
        System.out.println("最小值:Character.MIN_VALUE="  
                + (int) Character.MIN_VALUE);   
        // 以数值形式而不是字符形式将Character.MAX_VALUE输出到控制台   
        System.out.println("最大值:Character.MAX_VALUE="  
                + (int) Character.MAX_VALUE);  

 基本类型:byte 二进制位数:8

包装类:java.lang.Byte

最小值:Byte.MIN_VALUE=-128

最大值:Byte.MAX_VALUE=127

 

基本类型:short 二进制位数:16

包装类:java.lang.Short

最小值:Short.MIN_VALUE=-32768

最大值:Short.MAX_VALUE=32767

 

基本类型:int 二进制位数:32

包装类:java.lang.Integer

最小值:Integer.MIN_VALUE=-2147483648

最大值:Integer.MAX_VALUE=2147483647

 

基本类型:long 二进制位数:64

包装类:java.lang.Long

最小值:Long.MIN_VALUE=-9223372036854775808

最大值:Long.MAX_VALUE=9223372036854775807

 

基本类型:float 二进制位数:32

包装类:java.lang.Float

最小值:Float.MIN_VALUE=1.4E-45

最大值:Float.MAX_VALUE=3.4028235E38

 

基本类型:double 二进制位数:64

包装类:java.lang.Double

最小值:Double.MIN_VALUE=4.9E-324

最大值:Double.MAX_VALUE=1.7976931348623157E308

 

基本类型:char 二进制位数:16

包装类:java.lang.Character

最小值:Character.MIN_VALUE=0

最大值:Character.MAX_VALUE=65535

======================================================================

整数二进制

补码:

符号位是0(正数)他的补码就是本身。

符号位是1(负数)保持符号位不变,其余各位取反然后加一。

例如:

-7的二进制表示         -->1 0000111

符号位不变             -->1 0000111

其余各位取反然后加一   -->1 1111001

计算机加减法是基于补码完成计算的,减法也转换成加法计算。

8-7的二进制计算为:

 0 0001000

+1 1111001

11 0000001

最高位溢出去掉,结果是1。

 

正数的原、反、补码都是它自己。

负数的原码最高位是1,即代表负;

反码就是后七位按位取反;

补码就是反码加1。

 

数据在内存中始终是以二进制形式存放的。

系统在表示一个字符型数据时,并不是将字符本身的形状存入内存,而只是将字符的ASCII码存入内存。

在内存中所有的数据又是以二进制的形式存放的。所以上面的例子中'x'和'y'在内存中的表示如下:

'x'、'y'的ASCII码为120、121。而120、121的二进制形式为1111000、1111001。

所以'a'、'b'在内存中的表示为 1111000、1111001。

 

数值是以补码表示的。 

数值是以补码的方式参与运算,所以数值在内存中以补码的方式表示。

 



 

关于原码1000 0000,表示的是-0,还是-128呢?(答案是-128而不是-0)

看看原码的概念吧:正数的符号位为0,负数的符号位为1,其它位按照一般的方法来表示数的绝对值

0是负数吗?0既不是正数也不是负数,那么它的符号位到底是0还是1呢?(0的符号位为0,不能为1)

看看负数补码的公式:负数的补码=10000 0000(模)-数的绝对值

 

浮点类型二进制

float的组成是:1位符号位+8位指数(q)+23位底数(b),其解释出来的形式是b^q,由于指数q是8位有符号整数,范围是-128~127,23位的底数(无符号)最大值是2^23,算上指数的话最大可以表示到2^23^127。

由于float类型是一个幂计算式,所以很多时候并不能表达一个精确值,例如0.9,0.9在内存中无法用二进制准确表示,所以1-0.9为0.100000024,如果进行反复计算将会导致非常大的误差。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值