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得到无穷的具体原因就不知道了。

  • 相关阅读:
    【算法学习笔记】27.动态规划 解题报告 SJTU OJ 1254 传手绢
    【算法学习笔记】26.扫描维护法 解题报告 SJTU OJ 1133 数星星
    【算法学习笔记】25.贪心法 均分纸牌问题的分析
    【算法学习笔记】24.记忆化搜索 解题报告 SJTU OJ 1002 二哥种花生
    【算法学习笔记】23.动态规划 解题报告 SJTU OJ 1280 整装待发
    【算法学习笔记】22.算法设计初步 二分查找 上下界判断
    【算法学习笔记】21.算法设计初步 求第k个数 划分法 快排法
    【算法学习笔记】20.算法设计初步 归并排序 求逆序数
    【算法学习笔记】19.算法设计初步 最大子列和问题的几种方法
    【算法学习笔记】18.暴力求解法06 隐式图搜索2 八数码问题 未启发
  • 原文地址:https://www.cnblogs.com/shijt/p/9050263.html
Copyright © 2011-2022 走看看