[java,2017-05-17] 数据型参数趣谈
Posted shijt
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[java,2017-05-17] 数据型参数趣谈相关的知识,希望对你有一定的参考价值。
int的最大值是多少?加一呢?乘2呢?
第一个问题我想大多数人都知道,不知道后两个有多少人研究过。
首先上一段代码:
1 public class DecimalTest { 2 public static void main(String[] args) { 3 System.out.println("int=============="); 4 int int_max=Integer.MAX_VALUE; 5 int int_min=Integer.MIN_VALUE; 6 System.out.println(("int_max==="+int_max)); 7 System.out.println(("int_max+1==="+(int_max+1))); 8 System.out.println(("int_min==="+int_min)); 9 System.out.println(("int_min-1==="+(int_min-1))); 10 System.out.println(("int_max*2==="+int_max*2)); 11 System.out.println(("int_min*2==="+int_min*2)); 12 13 34 } 35 }
运行结果
int==============
int_max===2147483647
int_max+1===-2147483648
int_min===-2147483648
int_min-1===2147483647
int_max*2===-2
int_min*2===0
我们可以看到,int的最大值加一后变为了最小值,乘2后变为了-2;同时int的最小值减一后变为了最大值,乘2后变为了0。
这是因为int_max的值用二进制表示为 01111111111111111111111111111111,加一为 10000000000000000000000000000000,
而10000000000000000000000000000000正是int_min的二进制的补码形式。
所以最大值加一就变为了最小值,最小值减一就变为了最大值。
此外,还有其他的数据类型short、long与此相同。
System.out.println("short============="); short short_max=Short.MAX_VALUE; short short_min=Short.MIN_VALUE; System.out.println(("short_max==="+short_max)); System.out.println(("short_max+1==="+(short_max+1))); System.out.println(("short_min==="+short_min)); System.out.println(("short_min-1==="+(short_min-1))); System.out.println(("short_max*2==="+short_max*2)); System.out.println(("short_min*2==="+short_min*2)); long long_max=Long.MAX_VALUE; long long_min=Long.MIN_VALUE; System.out.println(("long_max==="+long_max)); System.out.println(("long_max+1==="+(long_max+1))); System.out.println(("long_min==="+long_min)); System.out.println(("long_min-1==="+(long_min-1))); System.out.println(("long_max*2==="+long_max*2)); System.out.println(("long_min*2==="+long_min*2));
还有与此不同的float、double类型
System.out.println("float============="); float float_max=Float.MAX_VALUE; float float_min=Float.MIN_VALUE; System.out.println(("float_max==="+float_max)); System.out.println(("float_max+1==="+(float_max+1))); System.out.println(("float_min==="+float_min)); System.out.println(("float_min-1==="+(float_min-1))); System.out.println(("float_max*2==="+float_max*2)); System.out.println(("float_min*2==="+float_min*2)); System.out.println(("float_min/2==="+float_min/2)); System.out.println("double============="); double double_max=Double.MAX_VALUE; double double_min=Double.MIN_VALUE; System.out.println(("double_max==="+double_max)); System.out.println(("double_max+1==="+(double_max+1))); System.out.println(("double_min==="+double_min)); System.out.println(("double_min-1==="+(double_min-1))); System.out.println(("double_max*2==="+double_max*2)); System.out.println(("double_min*2==="+double_min*2)); System.out.println(("double_min/2==="+double_min/2));
结果
float=============
float_max===3.4028235E38
float_max+1===3.4028235E38
float_min===1.4E-45
float_min-1===-1.0
float_max*2===Infinity
float_min*2===2.8E-45
float_min/2===0.0
double=============
double_max===1.7976931348623157E308
double_max+1===1.7976931348623157E308
double_min===4.9E-324
double_min-1===-1.0
double_max*2===Infinity
double_min*2===1.0E-323
double_min/2===0.0
加一没有变化,乘2得到一辆英菲尼迪(Infinity)。
加一没有变化是因为浮点数的计算不是精确的,当2个数字相差极大时,小的数字会被忽略(个人看法、没有求证,不太确定);
乘2得到无穷的具体原因就不知道了。
以上是关于[java,2017-05-17] 数据型参数趣谈的主要内容,如果未能解决你的问题,请参考以下文章