signedとunsignedを比較すると、コンパイラは符号付きの値をunsignedに変換し、shortをintと比較するとコンパイラはより小さな型をより大きな型に変換します。しかし、このコードを書いて、signed int x = 0xdeadbeefとunsigned short y = 0xffffを比較した後、unsigned shortをintに変換した後、xの符号なしの値よりも小さい比較でyに0x0000ffffを置く必要があります。しかし、私のコードは、xがyより大きいif条件には入りません。誰かがなぜ私に説明することができますか?符号付きintとunsigned shortをC++で比較しました
コードスニペット:
"Xの方が大きい" という印刷されないコードを実行#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が負であるためです。 – cleblanc
しかし、署名されていない署名と比較すると、コンパイラはそれを符号なしに変換してはいけませんか? –
btwあなたのコードは** C++ ** –