[java,2017-05-17] 数据型参数趣谈
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] 数据型参数趣谈的更多相关文章
- 067 01 Android 零基础入门 01 Java基础语法 08 Java方法 05 数组作为方法参数
067 01 Android 零基础入门 01 Java基础语法 08 Java方法 05 数组作为方法参数 本文知识点:数组作为方法参数 说明:因为时间紧张,本人写博客过程中只是对知识点的关键步骤进 ...
- 2017/05/17 java 基础 随笔
- 为什么C#动态调用Java的cxf多了bool型参数
最近的一个项目需要C#调用Java的cxf发布的接口,接口参数文档只给我的是两个long型,但是通过我动态加载发现,参数是四个. 比如接口文档给的接口是 TestFunc(long, long); 而 ...
- 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位 ...
- Java 集合系列 17 TreeSet
java 集合系列目录: Java 集合系列 01 总体框架 Java 集合系列 02 Collection架构 Java 集合系列 03 ArrayList详细介绍(源码解析)和使用示例 Java ...
- 23个适合Java开发者的大数据工具和框架
转自:https://www.yidianzixun.com/article/0Ff4gqZQ?s=9&appid=yidian&ver=3.8.4&utk=6n9c2z37 ...
- Java Hash Collision之数据生产
上一篇文章一种高级的DoS攻击-Hash碰撞攻击我通过伪造Hash Collision数据实现了对Java的DoS攻击,下面说说如何生产大量的攻击数据. HashTable是一种非常常用的数据结构.它 ...
- Java使用HTTP编程模拟多参数多文件表单信息的请求与处理
本文目的是提供Java环境下模拟浏览器页面提交多参数多文件表单请求以及解析请求的Demo代码.这里用Java提供的HttpURLConnection类做HTTP请求,再原始点可以直接使用socket. ...
- 【软件构造】第三章第三节 抽象数据型(ADT)
第三章第三节 抽象数据型(ADT) 3-1节研究了“数据类型”及其特性 ; 3-2节研究了方法和操作的“规约”及其特性:在本节中,我们将数据和操作复合起来,构成ADT,学习ADT的核心特征,以及如何设 ...
随机推荐
- Vue原理--虚拟DOM
为什么需要虚拟DOM? 如果对前端工作进行抽象的话,主要就是维护状态和更新视图,而更新视图和维护状态都需要DOM操作.其实近年来,前端的框架主要发展方向就是解放DOM操作的复杂性. 运行js的速度是很 ...
- webpack使用中遇到的问题
http://ife.baidu.com/note/detail/id/534 https://blog.csdn.net/hreticent/article/details/80489851
- http协议常见状态码含义
状态码有三位数字组成,第一个数字定义了响应的类别,且有五种可能取值: 2xx:成功--表示请求已被成功接收.理解.接受 200(成功) 服务器已成功处理了请求.通常,这表示服务器提供了请求的网页. ...
- C# 中String.Join()方法
今天在工作中看到了组里一个大佬写的代码,感触颇多,同样实现一个需求,我写循环费了老大劲,代码又臭又长,大佬的代码简洁明了,三行搞定...不得不说,今天赚大了 简单总结一下今天赚到的知识 string里 ...
- Ajax的工作原理以及优缺点
Ajax的工作原理 : 相当于在客户端与服务端之间加了一个抽象层(Ajax引擎),使用户请求和服务器响应异步化,并不是所有的请求都提交给服务器,像一些数据验证和数据处理 都交给Ajax引擎来完成,只有 ...
- L1-046 整除光棍
这里所谓的“光棍”,并不是指单身汪啦~ 说的是全部由1组成的数字,比如1.11.111.1111等.传说任何一个光棍都能被一个不以5结尾的奇数整除.比如,111111就可以被13整除. 现在,你的程序 ...
- mysql Incorrect usage of UNION and ORDER BY 错误备忘
出现这个错误的语句是酱紫的 select xxx from aaa order by xxx union all select yyy from bbb order by yyy 错误原因居然是,如果 ...
- C++中关于字符串的一些API
参考资料:http://www.runoob.com/cplusplus/cpp-strings.html 一.前言 不管是在编写何种语言程序,需要从输入设备中获取数据的需求很频繁,在这类频繁的应用场 ...
- XSS学习(一)
XSS(一) XSS分类 1.反射型XSS 2.持久性XSS 3.DOM型XSS **** 反射型XSS 也称作非持久型,参数型跨站脚本 主要将Payload附加到URL地址参数中 例如: http: ...
- Spark:DataFrame批量导入Hbase的两种方式(HFile、Hive)
Spark处理后的结果数据resultDataFrame可以有多种存储介质,比较常见是存储为文件.关系型数据库,非关系行数据库. 各种方式有各自的特点,对于海量数据而言,如果想要达到实时查询的目的,使 ...