整数溢出问题

Java 中的 int 用 32 位表示,正数最大值的情况,首位是 0,其他位都可以是 1(就是 2^31-1)。但是如果正数过大了,例如 2^31,计算机不得不把首位变成 1,并且计算机不知道这是溢出情况,把它按照正常的方式输出了,于是就成了负的。

2^31 - 1 = 0111 1111 1111 1111 1111 1111 1111 1111 = 2147483647

2^31      = 2^31 - 1 + 1 = 1000 0000 0000 0000 0000 0000 0000 0000 = -2147483648


演示1

public class Test {
public static void main(String[] args) {
int num = Integer.MAX_VALUE + 1;
System.out.println(num);
long longnum = Integer.MAX_VALUE + 1; //做加法前没有对加数进行转long型
System.out.println(longnum);
}
}

结果输出的两行都是-2147483648

解释

做加法前,没有将加数转为long型,相加结果为 int 型,Integer.MAX_VALUE + 1 = -2147483648,将 -2147483648赋值给long型变量 longnum 后,longnum = -2147483648,这个很好理解,例如,将 int 型的数 -1赋值给 long 型,结果还是 -1;


演示2

public class Test {
public static void main(String[] args) {
int num = Integer.MAX_VALUE + 1;
System.out.println(num);
long longnum = Integer.MAX_VALUE + (long)1;//将一个加数转为long型
System.out.println(longnum);
}
}

结果输出第一行是 -2147483648,第二行是 2147483648

解释

做加法前,将一个加数转为 long 型,再做加法,由于 long 型可表示的最大数大于 2147483648,没有发生溢出,将该值赋值给 long 型变量longnum,结果为 2147483648


应用

递归求 6 的阶乘

public class Factorial {
public static void main(String[] args) {
System.out.println(fac(6));
}

   //使用long作为返回值,递归到最后一次 return 1,返回时,1 被转为 long 型,再依次相乘,结果为 long 型,考虑 int 型溢出
public static long fac(int n){
if(n>1) {
return n * fac(n-1);
}else {
return 1;
}
}
}

java整数溢出问题及提升为long型的更多相关文章

  1. Java判断整数溢出

    开题报告第一版写完发给老师了,熬了两周终于搞出来了,等着被怼了之后再改吧.晚上选了Leetcode一道简单的题,整数反转,就是将一个int类型的数反转.原本确实很简单,最后出现个问题有意思--整数溢出 ...

  2. Java 内存溢出(java.lang.OutOfMemoryError)的常见情况和处理方式总结

    最近老是遇见服务器内存溢出的问题,故在网上搜了搜,总结了一些java内存溢出的解决方式 java.lang.OutOfMemoryError这个错误我相信大部分开发人员都有遇到过,产生该错误的原因大都 ...

  3. java学习二 数据类型自动提升 0x开头的数据是 16进制且是int型

    变量只能定义一次,不能定义两次, 变量的作用域:当前的大括号与子括号才有效 变量的作用:存储值,取值 整型:向上自动升级,向下强制降级 char,byte,shot参与运算时候自动提升为int型 因为 ...

  4. java内存溢出怎么解决

    java.lang.OutOfMemoryError这个错误我相信大部分开发人员都有遇到过,产生该错误的原因大都出于以下原因:JVM内存过小.程序不严密,产生了过多的垃圾. 导致OutOfMemory ...

  5. [转]Java 内存溢出(java.lang.OutOfMemoryError)的常见情况和处理方式总结

    原文地址: http://outofmemory.cn/c/java-outOfMemoryError java.lang.OutOfMemoryError这个错误我相信大部分开发人员都有遇到过,产生 ...

  6. Java基础学习总结(30)——Java 内存溢出问题总结

    Java中OutOfMemoryError(内存溢出)的三种情况及解决办法 相信有一定java开发经验的人或多或少都会遇到OutOfMemoryError的问题,这个问题曾困扰了我很长时间,随着解决各 ...

  7. CVE-2012-0774:Adobe Reader TrueType 字体整数溢出漏洞调试分析

    0x01 TrueType 字体 TTF 字体是 Apple 和 Microsoft 两家公司共同推出的字体格式,现在已经广泛的运用于 Windows 操作系统,其中 PDF 文档也可以嵌入 TTF ...

  8. java内存溢出分析(二)

    我们继续java内存溢出分析(一)的分析,点击Details>按钮,显示如下图,我们发现有一个对象数量达到280370216个,再点击其中的List objects 点击后,显示下图 至此,我们 ...

  9. Java内存溢出详解

    转自:http://elf8848.iteye.com/blog/378805 一.常见的Java内存溢出有以下三种: 1. java.lang.OutOfMemoryError: Java heap ...

随机推荐

  1. https://www.oschina.net/project/lang/19/java

    https://www.oschina.net/project/lang/19/java

  2. samba实现CentOS和window上的数据同步

    前言 之前做了一个项目,需要写python脚本来修改组件的安装方式,脚本是在windows下面的pycharm下面进行编写,但是编译要在linux上面进行分模块的maven编译,虽然之前也写了pych ...

  3. jquery:input操作

    1:让一个或一组单选框取消选择 $(".radio1").attr("checked",false); 2:查看一组单选框有么有被选中一个 $(".r ...

  4. cxgrid属性说明,每次用的时候费时费力查找。

    由层得到数据表名: procedure TFB_PatientWaiting.cxgrdbtblvwGrid1DBTableView_MyPatienWaitingDblClick( Sender: ...

  5. Vue相关文章

    1.新手向:Vue 2.0 的建议学习顺序 2.用webstorm搭建vue项目 3.vue-cli3.0项目结构

  6. 聚类-31省市居民家庭消费水平-city

    ===分三类的===== ======分四类的======== 直接写文件名,那么你的那个txt文件应该是和py文件在同一个路径的 ============code=========== import ...

  7. 前端页面JS和CSS以及图片加载nginx报错:net::ERR_CONTENT_LENGTH_MISMATCH的解决与检查

    首先检查nginx权限 具体可参考地址https://www.cnblogs.com/hooly/p/9951748.html 或者百度其他方法 还有种情况,之前是可以用的,突然出现这种加载报错的情况 ...

  8. Java_判断文件是否写入完成

    /** * 等待文件(非目录)读写完毕,费时的操作,不要放在主线程 * * @param file 文件 */ private void waitForWirtenCompleted(File fil ...

  9. Java采用RSA加密及解密技术的有关Maven项目的配置流程:

    第一步: 获得RSA公钥私钥(秘钥格式:PKCS#8 ,测试使用的是无私钥密码的) 公钥: -----BEGIN PUBLIC KEY----- MIGfMA0GCSqGSIb3DQEBAQUAA4G ...

  10. jsp Servlet 文件上传

    <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding= ...