Java问题总结之1-2--超出数据类型取值范围
来源:互联网 发布:网络协议怎么设置 编辑:程序博客网 时间:2024/06/06 08:38
Java问题总结:
问题1.超出数据类型取值范围:
数据类型:int
取值范围:-2^31--2^31-1
测试1:
package p1;public class test {public static void main(String[] args) {int i3 = 1;for (int i=1;i<34;i++){i3=i3*2;System.out.println(i3);}}}输出结果:
248163264128256512102420484096819216384327686553613107226214452428810485762097152419430483886081677721633554432671088641342177282684354565368709121073741824-214748364800
package p1;public class test {public static void main(String[] args) {int i3=1;for (int i=1;i<31;i++){i3=i3*2;}int k=0;for(int j=(i3-3)*2;k<15;j++,k++){System.out.println(j);}}}
测试结果:
214748364221474836432147483644214748364521474836462147483647-2147483648-2147483647-2147483646-2147483645-2147483644-2147483643-2147483642-2147483641-2147483640
分析:当前int型数据达到最大值2147483647时,是第一位为0,其余31位为全1,01111111111111111111111111111111;再加1则进1,第一位为0,其余全零,10000000000000000000000000000000。系统把第一位判断为负号,而且同时代表值,所以是-2147483648,当再继续相加时,系统会把之前的数当做负数,再加上正数1,则为-2147483647,10000000000000000000000000000001,后面以此类推。结合测试1,当为10000000000000000000000000000000时,即2147483648,再乘以2将溢出,溢出位娶不到,全0,即为00000000000000000000000000000000,此时为0(-2147483648再乘以2为什么是0的理解) . 再乘以2依然为0.
(上面为自己理解,不一定对,欢迎更正!)
问题2.将long赋值给float:
因为long是64位,而float为32位,有效位数为15位,将long型数据给float时是自动转换,不用强制转换,但是会有精度损失。
测试:
package p1;/** * This is document explain * @author xubo601450868 * @version v1.0 * @since v1.0 * test * */public class test2 {public static void main(String[] args) {long l3=1L;int i3=1;for (int i=1;i<60;i++){l3=l3*2;i3=i3*2;}float f3 =l3; System.out.println(i3); System.out.println(l3); System.out.println(f3);}}输出结果为:
05764607523034234885.7646075E17i3为0在上面问题1中已经总结,576460752303423488对于long型来说依然没有溢出,而自动转换为float型数据时会存为科学计数法,所以损失的很小。float是浮点数,与整数存储机制不一样,所以存储的最大值也不一样。
环境:
<pre name="code" class="plain">系统:win8.1 64位 IDE:eclipse Version: Mars Release (4.5.0) JDK:version 1.7.0_79
0 0
- Java问题总结之1-2--超出数据类型取值范围
- 关于数据类型取值范围相关问题
- Java基本数据类型的取值范围
- java中基本数据类型取值范围
- Java数据类型及对应取值范围
- java基本数据类型和取值范围
- Java数据类型及对应取值范围
- Java 基本数据类型的取值范围。
- Java 基本数据类型取值范围讲解
- java基础数据类型的取值范围
- java数据类型的取值范围
- java基本数据类型取值范围
- Java基本数据类型及其取值范围
- Java基本数据类型及其取值范围
- java基本数据类型取值范围
- java基本数据类型取值范围
- 数据类型取值范围
- 数据类型取值范围
- shell 显示百分数
- linux下svn命令大全
- sping boot demo解释
- iOS中Block全面分析
- Pipeline管道模型的入门理解
- Java问题总结之1-2--超出数据类型取值范围
- Android学习
- The Euler function(hdoj --2824-欧拉函数)
- POJ题目分类进阶
- hdoj 1856 More is better
- leetcode: (19) Remove Nth Node From End of List
- mac下解决中文编码问题
- 2015-08-24 part3 uboot.bin烧录
- windows 下和linux下 用python监控文件夹内容变化