数据溢出-int值太大变成负数

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/weixin_35959554/article/details/85600360

       在解析硬件传过来的信号时,因为在压力测试我就想记录一下一共传了多少包,下午再去看的时候,看打印日志竟然打印出了负数,一脸懵逼。我还以为是出什么想不到的bug了,后面我写了段测试代码如下

      int number = 1;
        while (number>0){
            number = number+100000;
            Log.e("number",number+"");
        }

输出的日志为

……
    2146900001
    2147000001
    2147100001
    2147200001
    2147300001
    2147400001
    -2147467295

竟然真的会变成负数,你们可以测试一下。为什么会出现这种情况勒,后来才想明白,每一个基本类型的取值都是有范围的,超过了范围就会出现意想不到的结果哦。

java基本类型的取值范围:

byte的取值范围为-128~127,占用1个字节(-2的7次方到2的7次方-1) 
short的取值范围为-32768~32767,占用2个字节(-2的15次方到2的15次方-1) 
int的取值范围为(-2147483648~2147483647),占用4个字节(-2的31次方到2的31次方-1) 
long的取值范围为(-9223372036854774808~9223372036854774807),占用8个字节(-2的63次方到2的63次方-1)
float 3.402823e+38 ~ 1.401298e-45(e+38表示是乘以10的38次方,同样,e-45表示乘以10的负45次方)占用4个字节 
double 1.797693e+308~ 4.9000000e-324 占用8个字节 

只要在基本类型范围内,那么就不会出现问题了。

猜你喜欢

转载自blog.csdn.net/weixin_35959554/article/details/85600360
今日推荐