1. 程式人生 > >無符號數與有符號數比較(易懂實用)

無符號數與有符號數比較(易懂實用)


題目一: int a = -1 unsigned int b = 1 rintf("%d", a > b) 結果輸出:1 因為無符號數與有符號數比較時,要將有符號數轉化為無符號數,再來比較。a轉化為無符號數後就是0xFFFFFFFF,肯定大於 題目二: char a = -1 unsigned char b = 1 rintf("%d", a > b) 結果輸出:0 奇怪了,怎麼會這樣?這是因為兩者被轉化為int了,a轉化為int就表示-1,b轉化為int 就是1,前者小於後者。注意了這裡不是像題目一里一樣簡單的把char轉化為unsigned char了 題目三: int a = -1 unsigned char b = -1 rintf("%d\n", a < b) 結果輸出是:1 原因在於要把b轉化為int就是0xFF當然大於-1了 題目四: char a = -1 unsigned int b = -1 rintf("%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型別來比較