Ich versuche zu lernen, wie Software und alle Tricks rückwärts zu entwickeln, um zu verstehen, wie der Code vor den Compiler-Optimierungen aussieht.a = -2147483648 - a; Compiler-Optimierung
fand ich so etwas wie dies mehrmals:
if (a < 0)
a = -2147483648 - a;
ich ursprünglich dachte, es war ein abs()
: eine Unterschreitungen, so dass Sie den positiven Wert erhalten. Aber da a
negativ ist (siehe if), ist dies gleichbedeutend mit:
if (a < 0)
a = -2147483648 + abs(a);
die eine sehr geringe negative Zahl sein wird, und nicht der absolute Wert der a
überhaupt. Was vermisse ich?
Sie verpassen nichts. Sie könnten abs (a) | verwenden Stattdessen 0x80000000. Keine Ahnung, warum das nützlich wäre. –
Von http://www.cs.cornell.edu/~tomf/notes/cps104/twoscomp.html - "Also, zum Computer, das Negative einer Zahl nehmen, das heißt, eine Zahl von 0 subtrahieren, ist das Gleiche wie das Invertieren der Bits und das Hinzufügen eines Bits, aus dem der Trick kommt ". –