2016-10-11 3 views
0

Ich schaue mir einen C++ - Quellcode an, wo es eine einfache Berechnung gibt. Aber ohne Kenntnisse in C++ kann ich nicht ganz verstehen, wie es wirklich berechnet wird (mein Ziel ist es, die gleiche Berechnung unter Excel durchzuführen).Verwirrt mit C++ "einfache" Berechnung mit Zeichen &

uint64_t fpo = (((ui>>32) << 24) | (ui & 0xffffff)) + 0x123e00; 
PrintAndLog("ui result : %lld [0x%llX]", ui, ui); 

In meinem Fall ui ist 0x0F007057B9 und das Ergebnis ist 0xF8295B9

Wenn ich den Windows-Rechner nehmen, ich (in Hex-Modus)

(0x0F007057B9 AND 0xffffff) + 0x123e00 

Ich erhalte die gleiche Ergebnis (erwartet für die erste 0xF)

Ich habe irgendwo gelesen, dass AND 1 zurückgibt, wenn beide Bits des gleichen "wiegen" sind 1 Also wenn ich ui AN nehme D 0xFFFFFF zu Binary konvertiert:

0x0F007057B9 0000111100000000011100000101011110111001 
0xffffff      111111111111111111111111 
------------------------------------------------------- 
      0000111100000000011100000101011110111001 

Welche jede Änderung macht ...

Bin ich völlig falschen Weg ?? Entschuldigung für mein schlechtes Englisch, ich komme aus Südkorea. Vielen Dank für Ihre Hilfe {^^;

+0

Was die Art der 'ist ui' –

+0

ui im Code zuvor definiert als: void print88x (uint32_t hi, uint64_t) –

+0

Eine andere Möglichkeit, die gleiche Sache zu schreiben wäre 'ui/0x100000000 * 0x1000000 + (ui% 0x1000000) + 0x123e00' –

Antwort

1

Für und seine

0 AND 0 = 0 
0 AND 1 = 0 
1 AND 0 = 0 
1 AND 1 = 1 

Also, wenn Sie und eine Reihe mit 0xffffff Sie basicly halten nur die Zahlen an diesen Positionen. Sie füllen die fehlenden mit 0

In Ihrem Fall:

0x0F007057B9 0000111100000000011100000101011110111001 
0xffffff  0000000000000000111111111111111111111111 
------------------------------------------------------- 
      0000000000000000011100000101011110111001 

Ich bin nicht sicher, ob das Ihre Frage tho :) war

+0

omg !! "Du füllst die fehlenden mit 0 aus" vielen Dank !! –

+0

Allerdings verstehe ich nicht, warum es 0xF8495B9 mit dem Code gibt. Und 0x8495B9 von Hand. Das Ergebnis des Codes ist: ui Ergebnis: 260216249 [0xF8295B9] Woher kommen die "260216249" (das ist die Dec-Darstellung des Hex) und "F"? Tut mir leid, ich bin nicht vertraut mit Stackoverflow, ich muss möglicherweise eine neue Frage (?) –

+0

Entschuldigung, das sind einfach zu viele unsortierte Zahlen für mich gerade jetzt. Sie müssen keine neue Frage erstellen, Sie können nur Ihr OP bearbeiten. Vielleicht hilft es, wenn Sie Ihre ganze Rechnung aufschreiben, um den Fehler zu erkennen. – TobiasCage