我知道當我們比較帶符號和無符號時,編譯器將我們的帶符號值轉換爲無符號值,當我們比較short和int時,編譯器將較小類型轉換爲較大類型。但是我編寫了這段代碼來檢查我們是否比較了一個帶符號的int x = 0xdeadbeef和unsigned short y = 0xffff,然後在將unsigned short轉換爲int之後,我們應該在y的比較處應該有0x0000ffff,它應該小於x的無符號值。但是我的代碼沒有進入if條件,即x大於y。有人可以向我解釋爲什麼?C++中signed int和unsigned short的比較
代碼片段:
#include<iostream>
using namespace std;
int main(){
unsigned int x=0xDEADBEEF;
unsigned short y= 0xFFFF;
if((signed)x > y)
cout<<"X is larger"<<endl;
return 0;
}
當運行的代碼,不打印 「X較大」。
因爲(有符號)x是負數。 – cleblanc
但是,當比較無符號到一個簽名不應該編譯器將其轉換回無符號? –
btw你的代碼是** C++ ** –