1

C++ では、16 進値を保持する 2 つの文字があります。

char t = 0x4;
char q = 0x4;

char に保持されている 2 つの値が同じ場合、どのように比較しますか?? 私は試した

if (t == q) // should give me true

いいえ、助けてください、ありがとう!

4

2 に答える 2

11

char は単なる 8 ビット整数です。16 進リテラルまたは 10 進リテラルで初期化したかどうかは問題ではありません。どちらの場合でも、char の値は後で同じになります。

そう:

char t = 0x4;
char q = 0x4;
if(t == q)
{
 //They are the same
}

これは以下と同等です:

char t = 4;
char q = 4;
if(t == q)
{
 //They are the same
}

上記は当てはまらないとおっしゃいましたが、コードにエラーがあるか、t と q が同じであってはなりません。

あなたが提案したこと...

if (t == q) // true を返す必要がありますが、いいえ、助けてください、ありがとう!

は正しくありません。なんで?

t & q はビット単位の比較を行い、整列された両方のビットが 1 である値を返します。

「if(t&q)」という用語は、t と q のいずれかのビットが共通である限り、true を返します。

したがって、バイナリ 00000011 の t = 3 とバイナリ 00000001 の q = 1 の場合、(t&q) は、それらが等しくないことを知っていても true を返します。

于 2008-11-02T20:21:13.100 に答える
-8

ああ、私は解決策を見つけました:

if (t & q)
于 2008-11-02T20:12:46.780 に答える