Java之資料溢位

2021-09-01 09:25:28 字數 697 閱讀 4137

首先,我們來討論乙個話題,是否存在乙個數,使得這個數加一之後小於這個數呢?表面來看是不可能的。那麼接下來,來看下面這個**:

public class day1 

}

程式執行結果:

這就是下面要介紹的資料溢位問題。對於int ,  long,  double等基本資料型別,都有自己的儲存範圍,一旦超過這個界限,則會出現資料溢位問題。我們以127和-128為例,來進行解釋:

在計算機中資料的儲存都是用補碼的編碼方式儲存的。對乙個數的二進位制序列它的最高位是符號位。0表示正數,1表示負數。

127的二進位制序列:0111 1111

-128的二進位制序列 : 1000 0000

也就是說當127加一後,它的後面是-128,最大的正數加下來是最小的負數。

接下來我們來看乙個求斐波那契額序列的**:

public class test 

public static long fact(int x)

return x * fact(x-1);}}

當進行小資料的求斐波那契的時候,int型完全夠用。但是當所數值過大時,int就不夠用了,所以使用long進行儲存,防止資料丟失。

Uart之資料溢位

在專案現場實施專案的過程之中,出現了乙個問題。stm32的控制器,莫名其妙會宕機,不定時會出現這個問題。出現之後系統指示燈不在閃爍,網路宕機,伺服器再也ping不同,下位機的控制器。經過debug發現了抓到了這個宕機的點。我發現並不是硬體錯誤,沒有呼叫hart fault這個中斷服務函式。但是主線程...

Java踩坑記 資料溢位

public static void main string args 上述 本身是在專案中,計算n天前的時間。表面上看起來這樣計算時間好像並沒有什麼問題,而且在n的值較小的時候。問題也並沒有暴露出來。我們可以看到,上述 種我們期待的輸出應該是false 但是實際的輸出卻是true。仔細思考下就會發...

Java 數值溢位

經常出現在用 int 型別計算時間戳時出現的問題,以下是計算 60 天的毫秒間隔時發現的問題和測試記錄。system.out.println 60 24 60 60 1000 system.out.println 60 24 60 60 1000l 執行結果 889032704 5184000000...