私はMSVC2005とQTで7 64ビットをウィンドウを使用しています(私はこれは基本的なデータ型charの問題ですので、QTが問題を引き起こしている疑い。Weired char型の行動++/MSVC2005/Windows 7の64ビット
だから私はそう
char A=0xAA;
if(A==0xAA)
printf("Success");
else
printf("Fail");
loのように二つのcharさんを比較し、それが失敗した見張るしようとする!しかし、私はそれについて考えたとき、私はこの
char A=0xAA;
char B=0xAA;
if(A==B)
printf("Success");
else
printf("Fail");
が、私は実際に!成功を得るないとき...ちょっと私は働いているnは64ビットプロセッサです。charは1バイトとして扱われるはずですが。おそらく4バイトとして格納されています。 だから、
char A=0xAA;
if(A==0xFFFFFFAA)
printf("Success");
else
printf("Fail");
今、私は成功を得ます!
しかし、WTF!この標準的な動作です!気になるものがcharとして定義されている場合、コンパイラはそれをどうしたらいいのか知ってはいけませんか?さらなるテストでは、charの最上位ビットが1の場合にのみ、余分なバイトが1つとして格納されることがわかります。したがって、0x07以下は0x00000007として格納されます。 WTF。
実際に私はすべての質問に答えているようでした...誰がこのバグを修正するために電話するかを除いて。これはバグですか? MSVC2005は64ビットオペレーティングシステムで正しく使用できますか、私は馬鹿です。私はMSVC2010を使用するためにQtクリエイターを得るべきだと思う。 2時間はかかります。
1の切り捨てコンパイラの警告は、このコードが正しくない可能性があることを示しています。これは64ビットとは関係ありません。 Charは、32ビットと64ビットの両方のWindows上の1バイトです。 –
'if(A ==((char)0xAA))'または 'if(A == '\ xAA')'を試してください – Steve314
私が致命的な欠陥を仮定していたと思います。コンパイラは、値を符号なしとして割り当てることを自動的に認識します。ブラスト! – umps