無符號數和有符號數中一些問題

在“有符號數”和“無符號數”做運算時,返回的結果默認為“有符號數”,且返回結果的位數會比之前多一倍。比如Uint32和int做運算,返回的數據的類型是long:有符號的64位整數。

兩個Uint32在進行運算時,返回的數值可用Uint32或long來接收不過最好用long,請看下面例子:


無符號數和有符號數中一些問題

輸出d2大家認為會返回什麼?返回的是:4294967295。

為什麼會這樣呢?不是應該返回-1嗎。

解釋:

首先正確的值是-1,-1是一個有符號數,所以計算機會算出它的補碼,也就是(這裡我用4位數來表示):1111。然而我們接受的類型確實Uint32,是一個無符號數,他就會認為-1的補碼就是源碼,不會轉換,然後最後32個1的轉換成十進制,那不就是4294967295。

但是我後面測試用long來接收d2這個變量,仍然是一樣的結果,所以跟我們接受類型無關,是根據兩個進行運算的類型來確定的。


分享到:


相關文章: