無符號數與有符號數比較

來源:互聯網
上載者:User

先出幾個題目,再解釋一下為什麼答案是那樣的。

題目一:

int a = -1;

unsigned int b = 1;

printf("%d", a > b);

結果輸出:1

因為無符號數與有符號數比較時,要將有符號數轉化為無符號數,再來比較。a轉化為無符號數後就是0xFFFFFFFF,肯定大於b

題目二:

char a = -1;

unsigned char b = 1;

printf("%d", a > b);

結果輸出:0

奇怪了,怎麼會這樣?這是因為兩者被轉化為int了,a轉化為int就表示-1,b轉化為int 就是1,前者小於後者。注意了這裡不是像題目一裡一樣簡單的把char轉化為unsigned char了

題目三:

int a = -1;

unsigned char b = -1;

printf("%d\n", a < b);

結果輸出是:1

原因在於要把b轉化為int就是0xFF當然大於-1了

題目四:

char a = -1;

unsigned int b = -1;

printf("%d\n", a == b);

結果輸出:1

原因是char類型被擴充為unsigned int後與b相等,同為0xFFFFFFFF

 

下面給出我個人得出的一些結論:

無符號int與有符號int比較大小,轉化為無符號int來比較

int類型與非無符號int的類型比較時,非無符號int的類型轉化為int來比較

無符號int類型與其他類型如unsigned short,signed short,unsigned char, char 比較時,其他類型一律轉化為無符號int類型來比較

非無符號int類型和非int類型如unsigned short,signed short,unsigned char, char 比較時,一律轉化為int類型來比較

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.