關於C 中有符號整型和無符號整型的轉換方法

2021-10-02 15:21:38 字數 669 閱讀 5219

首先舉個c++**,如下:

#include using namespace std;

/* * 這個程式演示了有符號整數和無符號整數之間的差別

*/int main()

輸出結果為:

-15536 50000
轉換方法(以16位二進位制為例):

(1)有符號十進位制整型→無符號十進位制整型

將有符號十進位制整數轉換二進位制,由於最高位為符號位,此時將符號位按資料位進行轉換,轉換的十進位制數即為無符號整型數。

注意:負數的二進位制是最高位為符號位,其餘位為絕對值的補碼(絕對值原碼取反+1),0011,1100,1011,0000(絕對值原碼),1100,0011,0101,0000(取反加1,最高位為1),該二進位制為-15536的二進位制表示。現將二進位制所有位視為資料位轉換十進位制,即得50000。

(2)無符號十進位制整型→有符號十進位制整型

將無符號十進位制整數轉換成二進位制,減1並按位取反,然後轉換成十進位制。

舉例:無符號整型數 50000,其二進位制為‭1100,0011,0101,0000‬,最高位為1,因此轉換後的有符號整型數為負數,其餘位視為整體,減1並按位取反得到011,1100,1011,0000,轉換十進位制數即為-15536。

無符號整型與有符號整型的比較

喵哥最近遇到乙個問題,比較兩個數的時候經常會出現很嚴重的bug,比如 unsigned int a 0 int b 2 if a b b 1 cout b endl 乍一看這段 輸出的應該是 2,0肯定不會小於 2嘛,但是事實上,b 1 這行 是會被執行的。如果大家對算術轉換比較熟悉的話,應該會想到...

學習無符號整型和有符號整型數的範圍

可以看出來,32位有符號整數可表示的最大數大於20億,32位無符號整數可表示的最大數大於40億,因此,碰上十幾億的海量資料處理時,不要慌 1 在32位系統中2 int的範圍是 2147483648,2147483647 3 unsigned int的範圍是 0,4294967295 4const u...

判斷無符號整型和有符號整型

在計算機記憶體裡,整數以補碼形式儲存 正數的補碼即原碼 正數如 50000 原碼為 0000 0000 0000 0000 1100 0011 0101 0000 補碼為 0000 0000 0000 0000 1100 0011 0101 0000 負數如 100 原碼為 1000 0000 00...