1. 程式人生 > >資料溢位-int值太大變成負數

資料溢位-int值太大變成負數

       在解析硬體傳過來的訊號時,因為在壓力測試我就想記錄一下一共傳了多少包,下午再去看的時候,看列印日誌竟然打印出了負數,一臉懵逼。我還以為是出什麼想不到的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個位元組 

只要在基本類型範圍內,那麼就不會出現問題了。