Ich erhalte unerwartete Ergebnisse (wahrscheinlich aufgrund meines Missbrauchs oder Missverständnisses, wie ein bitweises (&) Ausdruck funktionieren soll). Ich habe folgenden Code:C# Unerwartete Ergebnisse von bitweisem (&) Ausdruck
string sbin = "10010110"; // 150 = 1001 0110
uint ival = Convert.ToUInt32(sbin, 2);
ival.Dump(); // 150 Expected Correct
uint lval = ival << 16; // Shift 16 bits left
lval.Dump(); // 9830400 - Expected Correct
string slval = Convert.ToString(lval, 2);
slval.Dump(); // 0000 0000 1001 0110 0000 0000 0000 0000 - Expected Correct
uint lrval = lval & ival; // <--- This is where I am confused (while a '+' operator works, why does the & not return the proper result?)
// expecting 0000 0000 1001 0110 0000 0000 1001 0110 (aka 9830550 (dec))
lrval.Dump(); // returns 0,
Ich bin auf der Suche nach einer Erklärung, wo meine Logik versagt. Mein Ende Ausdruck, den ich zu erreichen bin auf der Suche nach ist:
uint xpos = 150;
uint ypos = 150;
uint val = ((xpos) & ((ypos) << 16))); // result is 0, should be 9830550 as above)
Natürlich
((xpos) + ((ypos) << 16))); // Would work properly
jedoch alle Beispiele I (für die Zwecke der Mausposition gesehen haben (POINT) Standorten haben ‚&‘ gezeigt in der Ausdruck)
'&' gibt die Bits zurück, die in beiden Werten gesetzt sind. 150 und 9830400 haben keine gemeinsamen Bits, also erhalten Sie 0. Sie suchen nach '|', die Bits zurückliefern, die auf * entweder * value gesetzt sind. Beachten Sie, dass das nicht das Gleiche wie Zusatz ist ... für ex. '1 | 1 wird gleich 1, da in beiden Werten die gleichen Bits gesetzt sind. –
Sie haben bitweise UND und bitweise ODER verwechselt. Verwenden Sie '|' anstelle von '&'. – willaien
Ahh ja das macht Sinn. Ich verstehe, also meine Verwirrung besteht in dem Beispiel (Antwort), das in http://stackoverflow.com/questions/10279812/simulate-click-into-a-hidden-window zur Verfügung gestellt wird. Zeige: PostMessage (hwndWindowTarget, WM_RBUTTONUP, 0, (pt.x) & ((pt.y) << 16)); // Das sollte technisch falsch sein dann –