zoukankan      html  css  js  c++  java
  • [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得到无穷的具体原因就不知道了。

  • 相关阅读:
    c# Invalidate() Update() Refresh()的区别
    Winform重画ComboBox背景色
    窗口过程 Wndproc
    设置DatagridView的列头样式
    SQL2005 全文检索超时的解决方案
    winform 获取当前程序运行根目录
    Web API-如何将Controller的返回值转换成HTTP response消息
    ASP.NET Web API 如何通过程序控制返回xml还是json
    C# web api返回类型设置为json的两种方法
    多组 RadioButtonList 获取值
  • 原文地址:https://www.cnblogs.com/shijt/p/9050263.html
Copyright © 2011-2022 走看看