Re: inversion de signe en Python

Top Page

Reply to this message
Author: Edgar Bonet
Date:  
To: guilde
Subject: Re: inversion de signe en Python
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.