二 有符號數與無符號數

2021-10-02 15:44:27 字數 926 閱讀 5285

計算機中的符號位

1.資料型別的最高位用於標識資料的符號

最高位為1,表明這個數為負數

最高位為0,表明這個數為正數

2.在計算機內部用補碼表示有符號數

正數的補碼為正數本身

負數的補碼為負數的絕對值各位取反後加1

3.在計算機內部用原碼表示無符號數

無符號數預設為正數

無符號數沒有符號位

4.對於固定長度的無符號數

max_value + 1 -> min_value

min_value - 1->max_value

5.signed 和unsigned 

c語言中變數預設為有符號的型別

unsigned 關鍵字宣告變數為無符號型別

unsigned 關鍵字只能修飾整數型別的變數

例子一

int main(int argc, char *ar**)
else
return a.exec();
}
該程式輸出的結果是什麼?
結果為 i+j> 0 原因: 當無符號數和有符號數混合計算時,會將有符號數轉換為無符號數後再進行計算,結果為無符號數。

例子二:

/*
* 錯誤的使用 unsigned int 為迴圈變數
*/
void example2()
}
int main(int argc, char *ar**)
輸出結果:一直迴圈的列印下去,原因 無符號數的最小值為0  當 0 在減1 時變為乙個最大數,導致迴圈 條件一直滿足

有符號數與無符號數

關於有符號數和無符號數的一些重要知識點,包括它們在記憶體中的儲存方式 互相轉換 越界計算等。大家肯定都知道,對於有符號數,資料型別的最高位用於標示資料的符號,最高位為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 最高位為符號位不必考慮 ...