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,如果进行反复计算将会导致非常大的误差。