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. SQLI DUMB SERIES-17

    (1)无论怎么输入username,都没有回显.尝试改变password的输入.找到了闭合方式:单引号 (2)报错注入: 爆库名 admin&passwd=admin' and extract ...

  2. VM安装centos7

    镜像:笔者采用的是CentOS-7-x86_64-Minimal-1810.iso版本 1.创建新的虚拟机 2.典型安装与自定义安装 典型安装:VMwear会将主流的配置应用在虚拟机的操作系统上,对于 ...

  3. CF300E. Empire Strikes Back

    题目链接(是的我越来越懒了..) 题目大意及数据范围: 数据范围很大.“最小”二字让我们考虑二分,但是上界...不会爆long long让你写高精吧? 我们可以发现,∑ai一定满足条件,所以上界是1e ...

  4. Appium环境搭建——安装以及运行appium server失败点总结

    一.运行Appium失败:未安装.Net Framework 4.5 之前安装AppScan安全测试工具时,就要求.Net 4.5以上环境,我其中一台电脑的系统是Win7-32bit的,安装.Net ...

  5. BOM模型中常用对象 定义计数器 网页跳转 网页前进后退

    今天上午学了的BOM模型中常用对象,了解了一部分的属性 For循环的规律 外层循环控制行 内层循环控制列 <!doctype html> <html> <head> ...

  6. Linux----------rsync的介绍及安装使用

    目录 一.rsync的介绍 1.1rsync的特点 二.rsync命令 三.rsync的ssh认证协议 四.ssh协议方式使用方法 五.rsync协议方式使用方法即 (rsync + inotifu- ...

  7. edgedb 集成timescaledb

    timescaledb 是一个强大的pg 扩展,可以让我们的pg 数据库支持时序数据库的能力,以下测试下与edgedb 集成 预备 因为edgedb 当前是基于pg11 开发的,所以需要使用pg11 ...

  8. redis scan删除key的方法封装

    /** * @desc 迭代式的删除redis key * 用法: * $redis = BaseService::S()->getRedisConfig(\Yii::$app->redi ...

  9. C goto

    http://c.biancheng.net/view/266.html 当程序遇到 goto 后, 会无条件跳转到标签后出,然后程序按照顺序执行 例子: #include <stdio.h&g ...

  10. Jboss安装配置以及相关的问题

    下载地址:(目前最新版本是jboss-as-7.1.1.Final) http://download.jboss.org/jbossas/7.1/jboss-as-7.1.1.Final/jboss- ...