java中int取值范围是怎么计算的?
2015-07-01 18:40
281 查看
首先jdk中定义int占4个字节 ===> 32位(后面所有的计算都是以此为依据的)
32位就是jvm只给分配32个格子的空间,用以存放数据。
总所周知计算机中用0和1存放数据。那么,32个格子中放满0或1的方法 有2的32次方种:
所以,这32个格子中,或者说32位的空间能标识10进制的数字:
最小
最大
第一种推算法:将二进制最大的数字(32个1)转换成10进制,即 4294967296;
第二种推算法:既然有2的32次方种算法,那么按照10进制最大的数就是2的32次方,即4294967296;
可惜,上面这种计算的是无符号,即正数,但是java中int有正负之分。所以32个格子中占用一个格子标识正负。所以只能用31个格子来标识数值。
下图:
x为0 1来标识正负。
最后int能标识的最大/最小数字是:2的31次方:+/- 2147483648
32位就是jvm只给分配32个格子的空间,用以存放数据。
总所周知计算机中用0和1存放数据。那么,32个格子中放满0或1的方法 有2的32次方种:
所以,这32个格子中,或者说32位的空间能标识10进制的数字:
最小
0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 |
第二种推算法:既然有2的32次方种算法,那么按照10进制最大的数就是2的32次方,即4294967296;
可惜,上面这种计算的是无符号,即正数,但是java中int有正负之分。所以32个格子中占用一个格子标识正负。所以只能用31个格子来标识数值。
下图:
X | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
最后int能标识的最大/最小数字是:2的31次方:+/- 2147483648
相关文章推荐
- mac selenium java版本安装
- android 华为手机eclipse中不显示日志问题
- 配置jbpm6.1的eclipse开发环境
- Spring AOP声明式事务异常回滚
- 如何在ListView中嵌入ViewPager
- java快速排序算法
- 解决Eclipse无法打开“Failed to load the JNI shared library”
- java.lang.ArrayIndexOutOfBoundsException
- Spring中@Transactional注解的深度分析
- springMVC的文件上传(注解)
- java学习之旅50--面向对象_23_回调的实现_模板方法模式
- java操作mysql存储读取图片
- webmagic的设计机制及原理-如何开发一个Java爬虫
- Java 递归、尾递归、非递归、栈 处理 三角数问题
- 关于springmvc3.2扫描Controller类的问题
- springmvc里的web。xml详解
- Java实现对Mysql的图片存取操作
- java.lang.IllegalStateException异常产生的原因及解决办法
- Java基础知识——JNI入门介绍
- Eclipse 一直Building Workspace 的解决办法