关于int的取值范围以及溢出的问题
2020-02-12 08:14
82 查看
int取值范围问题
看了好多大佬的评论以及回复,稍微懂了这么一点点,总结一下
首先谈一下int的取值范围问题
众所周知一个字节也就是1byte 取值范围=-27 ~ 27-1也就是-128~127,再看一下int类型,一个int类型占几个字节首先要看你是什么操作系统
16位的操作系统一个int占2个字节
32位和64位的操作系统一个int占4个字节
反正现在基本都用32位和64位,我就说一下这个吧
一般它们都长这样
0000 0000 0000 0000 0000 0000 0000 0001 |
---|
至于为什么是-231~ 231-1百度搜去,很多文章
最左边的一位是符号位0为正,1为负,所以会有一个+0和一个-0
由于-0的原码没有补码
由此可得int取值范围就是-231~ 231-1
int溢出问题
不要觉得这样就完了,不可能,上面放的是原码,咱们计算机储存都是靠补码储存的
简单介绍一下以下这三个东西
原码,反码,补码
正数 | 负数 | |
---|---|---|
原码 | 计算机中对数字的二进制定点表示方法 | 计算机中对数字的二进制定点表示方法 |
反码 | 等于原码 | 除符号位外按位取反 |
补码 | 等于原码 | 反码+1 |
举个例子
正数 1 | 负数1 | |
---|---|---|
原码 | 0000 0000 0000 0000 0000 0000 0000 0001 | 1000 0000 0000 0000 0000 0000 0000 0001 |
反码 | 0000 0000 0000 0000 0000 0000 0000 0001 | 1111 1111 1111 1111 1111 1111 1111 1110 |
补码 | 0000 0000 0000 0000 0000 0000 0000 0001 | 1111 1111 1111 1111 1111 1111 1111 1111 |
ok,进入正题说我们的int溢出问题,我们先举个小例子吧,我们取int的最大值2147483647也就是231-1
int i=2147483647; System.out.println("i+1的值为"+(i+1));
运行结果
i+1的值为-2147483648
为什么会这样呢,首先我们知道int 的正数最大值就是(补码)
0111 1111 1111 1111 1111 1111 1111 1111 |
---|
现在+1,也就是
0111 1111 1111 1111 1111 1111 1111 1111+0000 0000 0000 0000 0000 0000 0000 0001 |
---|
结果就是 1000 0000 0000 0000 0000 0000 0000 0000 也就是就是-0的补码 |
将-0转回原码,发现溢出了,所以,-0没有原码,然后就把-0规定为int的最小值,也就是-2^31
不信可以再+1,也就是
1000 0000 0000 0000 0000 0000 0000 0000 +0000 0000 0000 0000 0000 0000 0000 0001 |
---|
结果就是1000 0000 0000 0000 0000 0000 0000 0001 |
转成原码就是1111 1111 1111 1111 1111 1111 1111 1111也就是-2^31-1,不信用计算器算,哈哈 |
得出结论
ok谢谢各位观看到这,祝你们永不秃头,不秃头,秃头;
- 点赞 1
- 收藏
- 分享
- 文章举报
相关文章推荐
- 关于int的范围以及溢出问题
- 关于int(4字节)的取值范围由来(-2^31~2^31-1)问题
- 关于int取值范围的问题
- 关于int类型取值范围的计算 以及为何16位int类型范围是- 32768 ~ 32767
- 关于int类型取值范围的计算以及为何16位int类型范围是- 32768 ~ 32767
- C语言的整型溢出问题 int、long、long long取值范围 最大最小值
- C语言的整型溢出问题 int、long、long long取值范围 最大最小值
- 关于解决tomcat的一些问题-内存溢出 PermGen space以及超时
- 关于浮点数的精度与取值范围的问题
- 关于浮点数的精度与取值范围的问题
- byte类型取值范围以及溢出详解
- 关于为什么需要设置request.setCharacterEncoding以及适用范围问题
- 关于ZM问到C中int数据范围溢出
- 关于浮点数的精度与取值范围的问题
- 关于为什么电脑32位系统在处理数据时是4个字节的二进制数据以及byte取值范围的考虑?
- 关于bootstrap的treeview不显示多选(复选框)的问题,以及联动选择的问题,外加多选后取值
- C语言的整型溢出问题——各变量类型的取值范围
- 关于数据类型取值范围相关问题
- 【转】关于浮点数的精度与取值范围的问题
- 关于单精度和双精度的取值范围问题