Sto cercando di imparare come eseguire il reverse engineering del software e tutti i trucchi per capire come appare il codice prima delle ottimizzazioni del compilatore.a = -2147483648 - a; ottimizzazione del compilatore
ho trovato qualcosa di simile a questo più volte:
if (a < 0)
a = -2147483648 - a;
ho inizialmente pensato che fosse un abs()
: un underflow in modo da ottenere il valore positivo. Ma dal momento che a
è negativo (vedi il caso), questo equivale a:
if (a < 0)
a = -2147483648 + abs(a);
che sarà un numero molto piccolo negativo, e non il valore assoluto di a
a tutti. Cosa mi manca?
Non ti manca nulla. Potresti usare abs (a) | 0x80000000 invece. Non ho idea del perché sarebbe utile. –
Da http://www.cs.cornell.edu/~tomf/notes/cps104/twoscomp.html - "Quindi, al computer, prendendo il negativo di un numero, cioè sottraendo un numero da 0, è lo stesso di invertire i bit e aggiungerne uno, che è da dove viene il trucco ". –