Le lundi 3 décembre, Heurtaux Vincent a écrit :
> Si le bit "signant" est le MSD sur un octet A, alors faire un XOR avec
> B=10000000
> Donc on n'inverse que le signe et pas la valeur absolue...
C'est bien comme ça que sont représentés les nombres à virgule
flottante. Par contre, les entiers sont en général représentés en
complément à deux, c'est à dire la valeur modulo 2^n, où n est le
nombre de bits. Par exemple en 8 bits :
11111110 = -2
11111111 = -1
00000000 = 0
00000001 = 1
00000010 = 2
Pour inverser le signe il faut donc inverser *tous* les bits, puis
ajouter 1.
Gag : si j'écris en C "~x+1", gcc le traduit, même sans options
d'optimisation, par le même code que pour "-x", à savoir "negl %eax".
Moralité : plutôt que de me fatiguer à tripoter les bits, j'aime mieux
écrire "-x", c'est plus clair et à la fin ça donne la même chose, le
tripotage des bits étant de toutes façons fait en hard.
À+,
Edgar.