java中的所有数字都是有符号的,没有类似于C语言的unsigned类型
---------------------------------------------------------------------
int类型
int在java中是固定的32bits,表示的范围是 -2^31至2^31-1。
10位:-2147483648~2147483647。正的20亿左右,小数量计算使用。
System.out.println(Integer.MAX_VALUE);
System.out.println(Integer.MIN_VALUE);
---------------------------------------------------------------------
long类型
long在java中是固定的64bits,表示范围是 -2^63至2^63-1。
19位:-9223372036854775808~9223372036854775807。相当大的数量,可以用在银行计算钱上。
System.out.println(Long.MAX_VALUE);
System.out.println(Long.MIN_VALUE);
---------------------------------------------------------------------
float类型
float在java所在占位不固定,表示范围是 2^-149 至 2^128-1。
38位:1.4E-45~3.4028235E38。比long的位数多了一倍,主要用来简单数学中的精确运算。
System.out.println(Float.MAX_VALUE);
System.out.println(Float.MIN_VALUE);
---------------------------------------------------------------------
double类型
double在java所在占位不固定,表示范围是 2^-1074 至 2^1024-1 。
308位:4.9E-324 至 1.7976931348623157E308。是float数位的将近10倍,主要用来做复杂运算和天文运算。
System.out.println(Double.MAX_VALUE);
System.out.println(Double.MIN_VALUE);
---------------------------------------------------------------------
int与long都是符合2的n次方的形式,int是32位,long是64位,float与double则不符合这一规律。
float和doubled 表示形式与int和long是不一样的,采用的是IEEE 754标准,该标准理解如下:
(1)两者还是32位的,和int一样,最小值只是他们的精度,均为正数,请注意。如果要去的他们的最大负值,在他们的最大值前面加个符合即可,如-Float.MAX_VALUE,就是flost能表示的最大负值了。
(2)float从左到右,第一位是符号位,2-9位共8位表示正数位,2的(8-1)次方等于128,后面23位是表示小数的,所以最大值是2^128-1。
(3)double从左到右,第一位是符号位,2-12是共11位表示正数位,2的(11-1)次方是1024,剩余20位表示小数,所以最大值是2^1024-1。
(4)如上述代码,当正的最大值减去负的正数最大值,就会产生内存泄漏。溢出的结果是错误的。
参考地址:https://blog.youkuaiyun.com/u013905744/article/details/50997129