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. XAF创建一个DashBoard

    1.首先启动windows程序之后点击DashBoard导航栏 2.接着点击新建按钮,开始创建一个DashBoard 3.接着根据你的数据来源选择数据源,这里我选择了数据库 4.接着填好你的服务器和数 ...

  2. 图解HTTP阅读笔记(1)-网络基础TCP/IP

    1.TCP/IP协议族 TCP/IP这个概念对大家来说很熟悉,之前我的了解它只是一个协议.今天阅读才知道TCP/IP实际上是一个协议族,其中HTTP协议属于该协议族的一个子集.图1是TCP/IP协议族 ...

  3. 注意C语言 / 要想得到精确结果

    #include <stdio.h> int main(){    double r;    while(scanf("%lf",&r)!=EOF)    {  ...

  4. vue+axios跨域解决方法

    通过这种方法也可以解决跨域的问题. 使用http-proxy-middleware 代理解决(项目使用vue-cli脚手架搭建) 例如请求的url:“http://f.apiplus.cn/bj11x ...

  5. Python之删除空白

    Python能够找出字符串开头.末尾.两端多余的空白. lstrip()方法可以剔除字符串开头的空白: rstrip()方法可以剔除字符串末尾的空白: strip()可以剔除字符串两端的空白: fav ...

  6. VritualBox安装CentOS及安装增强工具图文教程

    一  VM VirtualBox VirtualBox可在官网https://www.virtualbox.org/下载,完全免费. 二  安装CentOS系统(以CentOS6.9为例) 1.Cen ...

  7. hadoop的一点小常识(1.0环境)

  8. 学习笔记TF067:TensorFlow Serving、Flod、计算加速,机器学习评测体系,公开数据集

    TensorFlow Serving https://tensorflow.github.io/serving/ . 生产环境灵活.高性能机器学习模型服务系统.适合基于实际数据大规模运行,产生多个模型 ...

  9. 使用redis作为Return存储方式

    Return组件可以理解为SaltStack系统对执行Minion返回后的数据进行存储或者返回给其他程序,它支持多种存储方式,比如MySQL.Redis.Memcache等,通过Return我们可以对 ...

  10. java8_api_stream

    与集合联系紧密 Stream-1    stream概念    特点    使用示例