1、計算機中的符號位
程式設計實驗:
#include int main()
輸出結果為:
2、有符號數的表示方法
在計算機內部用補碼表示有符號數
正數的補碼為正數本身
負數的補碼為負數的絕對值各位取反後加1
8位整數5的補碼 0000 0101
8位整數-7的補碼 1111 1001
16位整數20的補碼 0000 0000 0001 0100
16位整數-13的補碼 1111 1111 1111 0011
3、無符號數的表示方法
在計算機內部用原碼表示無符號數
- 無符號數預設為正數
- 無符號數沒有符號位
對於固定長度的無符號數
- max_value + 1 → min_value
- min_value - 1 → max_value
舉例:
乙個位元組大小的無符號數 1111 1111 + 1 = 0
乙個位元組大小的無符號數 0 - 1 = 1111 1111
4、當有符號數遇上無符號數
當無符號數與有符號數混合計算時,會將有符號數轉化為無符號數後再進行計算,結果為無符號數。
程式設計實驗:
#include int main()
else
if(i > j)
printf("i > j\n");
else if(i < j)
printf("i < j\n");
return 0;
}
輸出結果為:
5、錯誤地使用unsigned
程式設計實驗:
#include int main()
return 0;
}
輸出結果為:死迴圈
原因:變數i是unsigned int型別,一直都是大於等於0的,所以for迴圈的條件一直都成立
6、小結
來自為知筆記(wiz)
有符號數與無符號數
關於有符號數和無符號數的一些重要知識點,包括它們在記憶體中的儲存方式 互相轉換 越界計算等。大家肯定都知道,對於有符號數,資料型別的最高位用於標示資料的符號,最高位為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 最高位為符號位不必考慮 ...