C++ では、16 進値を保持する 2 つの文字があります。
char t = 0x4;
char q = 0x4;
char に保持されている 2 つの値が同じ場合、どのように比較しますか?? 私は試した
if (t == q) // should give me true
いいえ、助けてください、ありがとう!
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 を返します。
ああ、私は解決策を見つけました:
if (t & q)