int 是一种整型变量,是一种常用的数据类型,存放的是整数值,其取值范围是占用 4 字节 32 bit时的取值范围是 $$-2^{31}$$到 $$2^{31}-1$$也就是 -2147483648~2147483647,当我们的计算值超出这个范围时就会产生溢出问题。 可以将数据范围看成是一个循环圈:  当int值大于2147483647时,上界溢出,int总共可取值有2147483648*2种,对总可取数量取余,剩下的数字就相当于从0向右走了多少个。 当int值小于-2147483648时,下界溢出,对总可取数量取余,剩下的数字就相当于从0向左走了多少个。 ## int数值溢出示例 计算$$2^{31}$$的值 ```java //计算2的31次方的值 int value = 1; for (int i = 0; i < 31; i++) { value*=2; } Log.i("TAG", ""+value); ```  $$2^{31}$$的值应该是:2147483648,而这个结果大于int的最大值,上界溢出,2147483648 % (2147483648*2) = 2147483648,相当于从0向右走了 2147483648个。 参考: [关于java中int类型的取值范围等问题](https://blog.csdn.net/m0_51435111/article/details/123988102 "关于java中int类型的取值范围等问题") [Java中int a+b的溢出问题](https://blog.csdn.net/tx3666423/article/details/121669007 "Java中int a+b的溢出问题") 最后编辑:2022年11月22日 ©著作权归作者所有
最新回复