int的最大值是多少?加一呢?乘2呢?

第一个问题我想大多数人都知道,不知道后两个有多少人研究过。

首先上一段代码:

 public class DecimalTest {
public static void main(String[] args) {
System.out.println("int==============");
int int_max=Integer.MAX_VALUE;
int int_min=Integer.MIN_VALUE;
System.out.println(("int_max==="+int_max));
System.out.println(("int_max+1==="+(int_max+1)));
System.out.println(("int_min==="+int_min));
System.out.println(("int_min-1==="+(int_min-1)));
System.out.println(("int_max*2==="+int_max*2));
System.out.println(("int_min*2==="+int_min*2)); }
}

运行结果

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] 数据型参数趣谈的更多相关文章

  1. 067 01 Android 零基础入门 01 Java基础语法 08 Java方法 05 数组作为方法参数

    067 01 Android 零基础入门 01 Java基础语法 08 Java方法 05 数组作为方法参数 本文知识点:数组作为方法参数 说明:因为时间紧张,本人写博客过程中只是对知识点的关键步骤进 ...

  2. 2017/05/17 java 基础 随笔

  3. 为什么C#动态调用Java的cxf多了bool型参数

    最近的一个项目需要C#调用Java的cxf发布的接口,接口参数文档只给我的是两个long型,但是通过我动态加载发现,参数是四个. 比如接口文档给的接口是 TestFunc(long, long); 而 ...

  4. win10 如何配置 java jdk1.8环境变量(2017.8.17 )jdk1.8.0_144

    win10 如何配置 java jdk 环境变量 2017.8.17 本篇还适用于 windows server 2012. windows server 2014+ 一.安装 下载 jdk 64位 ...

  5. Java 集合系列 17 TreeSet

    java 集合系列目录: Java 集合系列 01 总体框架 Java 集合系列 02 Collection架构 Java 集合系列 03 ArrayList详细介绍(源码解析)和使用示例 Java ...

  6. 23个适合Java开发者的大数据工具和框架

    转自:https://www.yidianzixun.com/article/0Ff4gqZQ?s=9&appid=yidian&ver=3.8.4&utk=6n9c2z37 ...

  7. Java Hash Collision之数据生产

    上一篇文章一种高级的DoS攻击-Hash碰撞攻击我通过伪造Hash Collision数据实现了对Java的DoS攻击,下面说说如何生产大量的攻击数据. HashTable是一种非常常用的数据结构.它 ...

  8. Java使用HTTP编程模拟多参数多文件表单信息的请求与处理

    本文目的是提供Java环境下模拟浏览器页面提交多参数多文件表单请求以及解析请求的Demo代码.这里用Java提供的HttpURLConnection类做HTTP请求,再原始点可以直接使用socket. ...

  9. 【软件构造】第三章第三节 抽象数据型(ADT)

    第三章第三节 抽象数据型(ADT) 3-1节研究了“数据类型”及其特性 ; 3-2节研究了方法和操作的“规约”及其特性:在本节中,我们将数据和操作复合起来,构成ADT,学习ADT的核心特征,以及如何设 ...

随机推荐

  1. Vue原理--虚拟DOM

    为什么需要虚拟DOM? 如果对前端工作进行抽象的话,主要就是维护状态和更新视图,而更新视图和维护状态都需要DOM操作.其实近年来,前端的框架主要发展方向就是解放DOM操作的复杂性. 运行js的速度是很 ...

  2. webpack使用中遇到的问题

    http://ife.baidu.com/note/detail/id/534 https://blog.csdn.net/hreticent/article/details/80489851

  3. http协议常见状态码含义

    状态码有三位数字组成,第一个数字定义了响应的类别,且有五种可能取值: 2xx:成功--表示请求已被成功接收.理解.接受 200(成功)  服务器已成功处理了请求.通常,这表示服务器提供了请求的网页. ...

  4. C# 中String.Join()方法

    今天在工作中看到了组里一个大佬写的代码,感触颇多,同样实现一个需求,我写循环费了老大劲,代码又臭又长,大佬的代码简洁明了,三行搞定...不得不说,今天赚大了 简单总结一下今天赚到的知识 string里 ...

  5. Ajax的工作原理以及优缺点

    Ajax的工作原理 : 相当于在客户端与服务端之间加了一个抽象层(Ajax引擎),使用户请求和服务器响应异步化,并不是所有的请求都提交给服务器,像一些数据验证和数据处理 都交给Ajax引擎来完成,只有 ...

  6. L1-046 整除光棍

    这里所谓的“光棍”,并不是指单身汪啦~ 说的是全部由1组成的数字,比如1.11.111.1111等.传说任何一个光棍都能被一个不以5结尾的奇数整除.比如,111111就可以被13整除. 现在,你的程序 ...

  7. mysql Incorrect usage of UNION and ORDER BY 错误备忘

    出现这个错误的语句是酱紫的 select xxx from aaa order by xxx union all select yyy from bbb order by yyy 错误原因居然是,如果 ...

  8. C++中关于字符串的一些API

    参考资料:http://www.runoob.com/cplusplus/cpp-strings.html 一.前言 不管是在编写何种语言程序,需要从输入设备中获取数据的需求很频繁,在这类频繁的应用场 ...

  9. XSS学习(一)

    XSS(一) XSS分类 1.反射型XSS 2.持久性XSS 3.DOM型XSS **** 反射型XSS 也称作非持久型,参数型跨站脚本 主要将Payload附加到URL地址参数中 例如: http: ...

  10. Spark:DataFrame批量导入Hbase的两种方式(HFile、Hive)

    Spark处理后的结果数据resultDataFrame可以有多种存储介质,比较常见是存储为文件.关系型数据库,非关系行数据库. 各种方式有各自的特点,对于海量数据而言,如果想要达到实时查询的目的,使 ...