基本数据类型转换及溢出问题

1. int(Integer)和long(Long)之间的转换

  • int转long:向上转换,可直接进行隐形转换
int a = 10;
long b = (int)a;
int a = 10;
long b = a.longValue();
  • long转int:向下转换(容量大的数据类型转为容量小),可能会出现数据溢出情况
long   a = 10;
int b = (int)a;
long a = 10;
int b=a.intValue();

2.基本数据类型的取值范围

数据类型 占位大小 存储数据量 最大值 最小值
byte 8 2^8-1 = 255 2^7-1 = 127 (0111,1111) -2^7 = -128
short 16 2^16-1 = 65535 2^15-1 = 32767 -2^15 = -32768
int 32 2^32-1 2^31-1 = 2147483647 -2^31
long 64 2^64-1 2^63-1 -2^63

byte类型的最小值为什么是-128而非-127?
原因:计算机表示数值的方法有:原码、反码、补码,而现在计算机用补码存储整数数值

  • 原码:用二进制表示的原始编码
  • 反码:除了符号位外,其它位取反
  • 补码:正数的补码等于原码、负数的补码等于反码加1

而byte的最大正数为二进制的01111111 = 2^7-1 = 127 (0为符号位),这没有问题
对于负数而言,补码等于反码加1

  1. 1111,1111 补码就是 1000,0001 = -1
  2. 1111,1110的补码就是 1000,0010 = -2
  3. 依次类推…
  4. 1000,0001的补码就是 1111,1111 = -127
  5. 接下去 最大负数为 1000,0000 (十进制为 -0,但是就与+0重复,没有意义)不是负数的话,补码仍为 1000,0000,计算机就将这一数值表示为最大负数 -128

3.几个Demo

public class demo1{public static void main(String[]args){byte num=127;num+=2;
//输出是-127,原理是因为byte类型是8位的数据System.out.println(num);}
}

分析:127 对应的二进制为 0111,1111,其补码仍为:0111,1111,(计算机中只有加法运算,且运算都是其补码运算!!!)
加上2之后-------> 补码是:1000,0001(加1为“1000,0000”再加1为“1000,0001”)
上述补码再转回原码为:1111,1111 就是 -127

注意:当数据类型为byte、short、char型时,相互之间不能转换,它们参与运算是先将数据转换为int类型进行运算,也就是说若demo中num为byte类型的数据的话,是不会出现错误情况的!

public class demo1{public static void main(String[]args){Int num1=2147483647;Int num2=2147483647;//输出是-2,原因是int容器太小,溢出System.out.println(num1+num2);}
}

分析:本来结果是 4294967294,因为int 之间的结果 还是int类型
4294967294的二进制及其补码都是 “1111,1111,1111,1111,1111,1111,1111,1110”转换为补码就是“1000,0000,0000,0000,0000,0000,0000,0010”
十进制结果就是 -2

4.int转为byte类型的溢出处理

byte的存储范围是-128-127的整数范围,byte a = (byte)130;结果会是多少呢?java是如何处理强制类型转换的溢出处理呢?

  1. 在计算机中,所有数据都以补码形式存储,那么130首先当作int存储,32位,其二进制原码和补码都为:“0000,0000,0000,0000,0000,0000,1000,0010”;
  2. 转换为byte类型,进行截取,高字节部分去除,保留低字节部分(即留取后面部分),得到转换为byte的补码为:“1000,0010”
  3. 转回原码为:“1000,0010”—>“1000,0001”------>“1111,1110” 十进制表示“-126”

所以高容量向下转换存在数据溢出的情况

以上只举例说明了几种基础数据类型间的转换,其它类型同理~

Java中int和long数据类型转换及溢出问题相关推荐

  1. JAVA中int、String的类型转换(亲测)

    int -> String int i=12345; String s=""; 第一种方法:s=i+""; 第二种方法:s=String.valueOf( ...

  2. JAVA中int、String的类型转换

    int -> String int i=12345; String s=""; 第一种方法:s=i+""; 第二种方法:s=String.valueOf( ...

  3. java中int与char之间的互相转化

    引言 在介绍java中int与char之间的互相转化之前,让我们先简单的回顾一些会涉及到的知识. 数据类型 在介绍int与char的转换之前,我们先来回顾一下java中的基本数据类型: 类型 大小 包 ...

  4. PG中的几种数据类型转换方式

    PG中的几种数据类型转换方式 1.通过格式化函数进行转换 函数 返回类型 描述 示例 to_char(timestamp,text) text 把时间戳转换成字符串 to_char(current_t ...

  5. java double 类型_关于Java中的double类型数据

    在初学Java的时候,一般我们都会从基本的数据类型开始学习,而在基本数据类型中,我认为double类型是比较难理解的,并且在以后的学习或工作中,在double类型数据这遇到的坑也是极多的.例如下面的这 ...

  6. 通读《C++ primer plus》— C++中的5种数据类型转换方式

    通读<C++ primer plus>-记录一 C++中的5种数据类型转换方式 1.始化和赋值时转换 比如 int a=1; long b=2147483647; a=b; 上面的代码并不 ...

  7. 你知道如何快捷地在Java中使用现有Excel数据创建PPT图表吗?

    Spire.Office for .NET是一套企业级的涵盖 E-iceblue 所有 .NET Office 组件的集合.使用 Spire.Office for .NET,开发人员可以创建大量的用于 ...

  8. 016 Java中 int、Integer和 new Integer() 使用==比较

    Java中 int.Integer和 new Integer() 使用==比较 int则是java的一种基本数据类型,其定义的是基本数据类型变量 :Integer是int的包装类,其定义的是引用类型变 ...

  9. 【java技术面试第四讲】Java面试题04.java中int占几个字节

    Java面试题04 : java中int占几个字节 好啦!今天的文章就给看官们分享到这儿 如果觉得有帮助,记得关注.转发.收藏哟~       最近小编准备以连载的形式为大家分享一系列完整的面试经常问 ...

最新文章

  1. G1回收器:我怎么知道你是什么时候的垃圾?
  2. 英雄联盟手游火线妹上线了!金克丝也想成为第一AD吗?
  3. ubuntu复制文件到另一个文件夹_简单介绍一下电脑中的文件或文件夹的复制、移动及删除的操作方式...
  4. 从“做什么”到“怎么做”,说说一只蚊子
  5. if--(else)语句,getchar()和putchar()、、||、!逻辑运算符
  6. Chapter 4 Invitations——10
  7. matlab18a安装步骤,MATLAB R2018a图文安装教程
  8. 《看见》读后感:跟柴静一起成长,追求独立与真相
  9. mfs java_mfs权威指南
  10. 白盒测试和黑盒测试(感谢东子哥作答)
  11. 计算机硬件综合实验六:CPU组成与机器指令执行实验
  12. Matlab图形窗口大小的控制 ,plot窗口大小,figure大小,axis设置,实用
  13. markdown 做图 : Mermaid语法
  14. idea社区版配置jsp
  15. 二维码怎么制作?看完这篇你就会了
  16. 快手__nsTokensig和sig签名
  17. 一个新开源的BUG管理系统Cynthia
  18. android定位的速度方向如图所示,在Android中计算罗盘方位/前往位置
  19. matlab制作动画并保存,[转载]Matlab中动画的实现、制作和保存(转载Matlab技术论坛)...
  20. 2021-2027全球与中国变性酒精市场现状及未来发展趋势

热门文章

  1. java实现第五届蓝桥杯殖民地
  2. 外媒披露斯诺登如何从香港逃脱:接受难民庇护
  3. 大数据Hadoop生态圈介绍
  4. 智能家居一Homekit智能吸顶灯
  5. 图形引擎实战:浅谈移动端无尽海面的网格生成
  6. 关于PHP不死马的分析和总结
  7. Python基础学习08-字典
  8. eclipse无法生成class文件,servlet修改后未更新,总是重启服务器
  9. DHCP服务器搭建和基本知识总结
  10. android默认exported_Android android:exported = true 用法详解