[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的核心特征,以及如何设 ...
随机推荐
- 51单片机---点亮一个LED灯
1 程序源码 #include <REGX52.H> `包含51单片机的头文件` sbit led = P0^0; int main(void) { while(1) { led = 1; ...
- 你想知道吗?come
从大二接触Java开始,到现在也差不多三个年头了.从最基础的HTML.CSS到最后的SSH自己都是一步一个脚印走出来的,其中开心过.失落过.寂寞过.虽然是半道出家但是经过自己的努力也算是完成了“学业” ...
- mysql并发更新
mysql并发更新 常见方案 乐观锁 select * from tab1 where id = ?; update tab1 set col1 = ? where id = ? and versio ...
- ACM山东工商 栈和队列算法练习
#include <stdio.h>#include <stdlib.h> #define SIZE 20 typedef struct hold{ char sign[S ...
- Excel常用公式
转载请注明来源"ExcelHome"并保留原文链接.固定链接:http://www.excelhome.net/lesson/article/excel/1897.html 1.I ...
- Django Admin初识
一.网站后台的作用 网站后台通常是相对于动态网站而言,即网站建设是基于数据库驱动的网站.网站后台,有时也称为网站管理后台,是指用于管理网站前台的一些列操作,如:产品.企业 信息的增加.更新.删除等.通 ...
- Intel汇编指令格式解析
环境: win7_x64旗舰版.VS2015企业版 一.Intel保护模式.实地址模式和虚拟8086模式指令格式(x86) 图在Intel手册2.1章节 1.1)Instruction Prefixe ...
- 提取excel表数据成json格式的以及对图片重命名
开发那边的需求 1.功夫熊猫以及阿狸布塔故事集都是属于剧集的.意思就是有很多集,这里称他们为tv最下面这几行第一列没名字的都是单集的,这里称它们为mv需要统计所有工作表里面的数据把tv放一个大的jso ...
- 03day->python基本数据类型
基本数据类型 1.数字(int) a = 5 a.bit_length() # 查看数字实际用到的bit位 2.布尔值(bool) 用于条件判断 3.字符串(str) ...
- Unity 3D入门简介
最近在刚开始学习Unity 3D,在这里记录一下学习心得和学习笔记,边学边写,可能会比较零散.好了,废话不多说,今天从Unity 3D入门写起,主要简要介绍一下Unity 3D的和一些学习资料.以下如 ...