jav---int,float,long,double取值范围,内存泄露

 1 public class TestOutOfBound {
 2 public static void main(String[] args) {
 3
 4 System.out.println(Integer.MAX_VALUE-(-Integer.MAX_VALUE)); //内存溢出
 5 System.out.println(Integer.MAX_VALUE); //2的31次方-1,10个数位,正的20亿左右,用在钱上面不一定够
 6 System.out.println(Integer.MIN_VALUE); //负的2的31次方
 7 System.out.println(Long.MAX_VALUE); //2的64次方-1,19个数位,很大了,可放心用在钱上面
 8 System.out.println(Long.MIN_VALUE); //负的2的64次方
 9 System.out.println(Float.MAX_VALUE); //2的128次方-1,38个数位,比long多了一倍,这个主要用来做简单数学精确运算使用
10 System.out.println(Float.MIN_VALUE); //2的-149次方
11 System.out.println(Double.MAX_VALUE); //2的1024次方-1,308个数位,是float数位的10倍,主要用来做复杂运算和天文运算
12 System.out.println(Double.MIN_VALUE); //2的-1074次方
13
14
15
16 }
17 }

运行结果如下:

-2
2147483647
-2147483648
9223372036854775807
-9223372036854775808
3.4028235E38
1.4E-45
1.7976931348623157E308
4.9E-324

int和long都是很循规蹈矩的符合2的n次方的说法,int是32位,long是64位,唯有float和double像两个淘气的小孩子让人会捉摸不透。float和double的表示形式与int和long是不一样的,他们采用的是IEEE 754标准,这个标准可以这样理解:

(1)两者还是32位的,和int一样,最小值只是他们的精度,是正数,这是需要注意的。如果要取到他们负最大,在他们的最大值前加个符号就好了,如-Float.MAX_VALUE,就是float能表示的负的最大了。

(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)如上面代码,当正的最大减去负的正最大,就产生了内存泄露。溢出的结果是不对的。

总结:int 和long,float和double的存储要分别对待.要取到实实在在的最大最小值,只需要取到最大值就行了。

时间: 2024-08-11 01:34:31

jav---int,float,long,double取值范围,内存泄露的相关文章

java中int,float,long,double取值范围,内存泄露

java中int,float,long,double取值范围是多少? 写道 public class TestOutOfBound { public static void main(String[] args) { System.out.println(Integer.MAX_VALUE-(-Integer.MAX_VALUE)); //内存溢出System.out.println(Integer.MAX_VALUE); //2的31次方-1,10个数位,正的20亿左右,用在钱上面不一定够Sy

java中short、int、long、float、double取值范围

一.分析基本数据类型的特点,最大值和最小值.1.基本类型:int 二进制位数:32包装类:java.lang.Integer最小值:Integer.MIN_VALUE= -2147483648 (-2的31次方)最大值:Integer.MAX_VALUE= 2147483647  (2的31次方-1)2.基本类型:short 二进制位数:16包装类:java.lang.Short最小值:Short.MIN_VALUE=-32768 (-2的15此方)最大值:Short.MAX_VALUE=327

int long long 的取值范围

unsigned   int   0-4294967295   //整型的每一种都有无符号(unsigned)和有符号(signed)两种类型(float和double总是带符号的),在默认情况下声明的整型变量都是有符号的类型(char有点特别),如果需声明无符号类型的话就需要在类型前加上unsigned.无符号版本和有符号版本的区别就是无符号类型能保存2倍于有符号类型的正整数数据. int   2147483648-2147483647 unsigned long 0-4294967295 l

C# 与数据库中字段类型 Int16(short), Int32(int), Int64(long)的取值范围、区别 。string长度

一开始看到Int16, Int32, Int64这三种类型就觉得有点怪, 为什么要整个数字结尾的, 挺怪的. 昨天互相想到, ms这么干就是想让大家一眼就知道这个数据类型占多大空间吧. Int8, 等于byte, Int16, 等于short, 占2个字节. -32768 32767 Int32, 等于int, 占4个字节. -2147483648 2147483647 Int64, 等于long, 占8个字节. -9223372036854775808 9223372036854775807

[转]java基本类型(内置类型)取值范围

原文地址:java求职重点归纳(8)--基本类型(内置类型)例作者:smallcat 例1: public class PrimitiveTypeTest { public static void main(String[] args) { // byte System.out.println("基本类型:byte 二进制位数:" + Byte.SIZE); System.out.println("包装类:java.lang.Byte"); System.out.p

黑马程序员---Java 基本数据类型取值范围讲解

-------android培训.java培训.期待与您交流! ---------- java中的类型概念名的说法不一.让我很是迷茫,我个人的理解整理,如有错误还请高人指点,! 一.Java的类型词语理解: 1) 原始数据类型,简单类型,基本类型都是一个含义: 2)复合类型,扩展类型,复杂类型.引用类型都是一个含义: 3)浮点类型,实数.实型都是一个含义: 4)逻辑型.布尔型都是一个含义: 阅读时需要理解: 定点:定点的意思是把小数点定在末尾,小数点后没有数字的数据,Java中通常把它们称为整数

float、double的精度、范围,在内存中的存储方式

float.double的精度,在内存中的存储方式 ? 一.浮点型变量在内存中的存储方式 Java的浮点数遵循IEEE 754标准,采用二进制数据的科学计数法来表示浮点数,float遵从的是IEEE R32.24 ,而double 遵从的是R64.53.该标准中表示的浮点数表示分为规约形式和非规约形式以及特殊情况. ??? 无论是单精度还是双精度在存储中都分为三个部分: 符号位(Sign) : 0代表正,1代表为负 指数位(Exponent):用于存储科学计数法中的指数数据,并且采用移位存储 尾

mysql中bigint、int、mediumint、smallint 和 tinyint的取值范

mysql数据库设计,其中,对于数据性能优化,字段类型考虑很重要,搜集了些资料,整理分享出来,这篇为有关mysql整型bigint.int.mediumint.smallint 和 tinyint的语法介绍,如下:1.bigint 从 -2^63 (-9223372036854775808) 到 2^63-1 (9223372036854775807) 的整型数据(所有数字),无符号的范围是0到 18446744073709551615.一位为 8 个字节. 2.int 一个正常大小整数.有符号

17 Java语言基础long与float的取值范围谁大谁小

结论 float的取值范围比long大 验证 1 public class Test1_DataTypeConversion { 2 3 public static void main(String[] args) { 4 5 float f = 1.3f; 6 long l = 34; 7 // l = f; 8 // System.out.println(l); 9 //Type mismatch: cannot convert from float to long 10 f = l; 11