資料溢位-int值太大變成負數
阿新 • • 發佈:2019-01-03
在解析硬體傳過來的訊號時,因為在壓力測試我就想記錄一下一共傳了多少包,下午再去看的時候,看列印日誌竟然打印出了負數,一臉懵逼。我還以為是出什麼想不到的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
double 1.797693e+308~ 4.9000000e-324 佔用8個位元組
只要在基本類型範圍內,那麼就不會出現問題了。