Das Problem ist, dass eine Position in einer Hex-Darstellung wie ein einzelne F
oder Ihre einzelnen 3
ein Nagen von 4 Bits repräsentiert (oder einen „Halbbyte“ in Ihren Worten).Wenn ich dich richtig verstehe, dann willst du überprüfen, ob das vollständige "Nibble" genau 3
ist, d.h. 0011b
. Dann wird das Problem mit dem Ausdruck A & 0x00003000
ist, dass es „Schnitt“ entfernt die ersten beiden Bits des knabbern von Interesse so groß, daß eine Eingabe an dieser Stelle sein könnte 1111b
oder 1011b
oder 0111b
oder 0011b
und A & 000003000
würde immer 0011
geben an dieser Stelle.
Also sollten Sie schreiben (A & 0x0000F000) == 0x00003000)
, so dass Sie tatsächlich das gesamte Nibble und nicht nur die niedrigsten zwei Bits davon testen. Sehen Sie sich den folgenden Code an, der diesen Ansatz veranschaulicht. Ich hoffe es hilft.
int main() {
int test[] = { 0x00203450, 0x00202450, 0x00207450, 0x0020F450, 0x00200450, 0 };
for (int* t=test; *t; t++) {
const char* result = ((*t & 0x0000F000) == 0x00003000) ? "true" : "false";
printf("%08X contains the 3: %s\n", *t, result);
}
return 0;
}
aussehen wie ein [XY Problem] (https://meta.stackexchange.com/questions/66377/what-is-the-xy-problem). – Stargateur
Können Sie bitte einige Beispiele für Werte angeben, bei denen der Test wahr ist, und andere, bei denen der Test falsch ist? Eigentlich denke ich, dass dein '(A & ...)' -Ansatz funktionieren sollte. –
@StephanLechner '0xFFFF' return true aber sollte es keine' 3' geben – Stargateur