無符號數與有符號數相比

2021-10-01 17:33:28 字數 675 閱讀 7662

先來看一段**

#include

int i = 0;

int main()

else

return 0;

}

這段**的輸出結果是什麼?

結果出乎意料:>

緩緩地打出三個問號 ???

下面就來分析一下問什麼會出現這種情況

i = 0;(初始值)

i = -1;(i–執行後)

sizeof(i) = 4;

那麼就是判斷(i > sizeif(i) = 4)?

i= -1 已經是不能改變的,那麼問題就一定出現在(sizeof()函式上)

經過查詢,可以發現sizeof()函式的返回值是無符號整型,那又能說明什麼呢?

i = -1; i 是乙個有符號數;而sizeof()返回值是無符號數,結果是i > sizeof(i),那麼至此。可以得出乙個結論:

當無符號數和有符號數進行運算時,會將所有的數都當作無符號數來運算

我們知道,資料在記憶體中是以二進位制補碼的形式儲存的,-1是有符號數,所以它的最高位符號位必定是1,當它和sizeof(i)比較時,會將它當作無符號數進行比較,即將它所有的二進位制序列當作數值位,那麼將會是乙個非常大的數,所以就會出現上面的結果。

破案了!

有符號數與無符號數

關於有符號數和無符號數的一些重要知識點,包括它們在記憶體中的儲存方式 互相轉換 越界計算等。大家肯定都知道,對於有符號數,資料型別的最高位用於標示資料的符號,最高位為1表示負數,最高位為0表示正數,那麼今天我們主要就此討論乙個問題 在計算機內部具體是如何表示有符號數呢?在計算機內部是通過補碼的方式來...

無符號數與有符號數比較

2012 04 24 19 30 2555人閱讀收藏 舉報擴充套件 先出幾個題目,再解釋一下為什麼答案是那樣的。題目一 int a 1 unsigned int b 1 printf d a b 結果輸出 1 因為無符號數與有符號數比較時,要將有符號數轉化為無符號數,再來比較。a轉化為無符號數後就是...

無符號數與有符號數比較

1轉化為無符號數 65535 在計算機中負數是用補碼表示的,即反碼加1 正數直接用原碼表示 因為 1是負數就用補碼表示為 00000000 00000001 的反碼 11111111 11111110 1 即 11111111 11111111 轉換為十進位制數為65535 最高位為符號位不必考慮 ...