第2課 有符號數與無符號數

2022-02-21 11:32:54 字數 1150 閱讀 5594

有符號整型有正數和負數,那在記憶體中是如何區分它們的呢?最高位用來標識資料的正負。

【有符號數的符號位】

1 #include 2

3int

main()

4

在計算機內部用補碼表示有符號整型

舉例:

char型整數5的補碼:0000 0101

char型整數-7的補碼:0000 0111 ==> 1111 1000 ==> 1111 1001

short型整數20的補碼:0000 0000 0001 0100

short型整數-13的補碼:0000 0000 0000 1101 ==> 1111 1111 1111 0010 ==> 1111 1111 1111 0011

(1)在計算機內部用原碼表示無符號數

(2)對於固定長度的無符號數

(3)signed和unsigned

1

int i; //

預設為有符號整數

23 signed int j; //

顯式宣告變數為有符號整數

45 unsigned int k ; //

宣告為無符號整數

下面看兩個筆試中容易考察到的題目:(1)當有符號數遇到無符號數時,有符號數在記憶體中的值會被看作無符號數

1 #include2

3int

main()416

else

1720

21return0;

22 }

(2)錯誤的使用了unsigned,unsigned修飾的無符號數不會是乙個負數

1 #include 2

3int

main()413

14return0;

15 }

有符號數與無符號數

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