Operateur rotation binaire
Bonjour à tous,
je suis entrain de retaper une application Javascript en python, et je suis tombé sur un problème:
à un moment dans le script, je tombe sur un ligne:
alors, je farfouille un peu et je trouve ceci sur un autre site :
Citation:
<< :: Rotation à gauche :: Décale les bits vers la gauche (multiplie par 2 à chaque décalage). Les zéros qui sortent à gauche sont perdus, tandis que des zéros sont insérés à droite
Okay... alors, on refait le truc a la mano ensemble,
pour x = 1751007518
et n = 1
Code:
1 2 3 4
|
(dec)1751007518 = (bin)1101000010111100100000100011110
on décalle le bit : 11010000101111001000001000111100
(bin)11010000101111001000001000111100 = (dec)3502015036 |
Donc, okay, ça correspond bien à une multiplication par 2.
et c'est d'ailleur ce que python me reponds si je lui demande "1751007518<<1"
Alors.... pourquoi en javascript "alert(1751007518<<1)" me renvoie -792952260 ???? oO
en regardant d'un peu plus pres, Si on compare un peu les deux valeur binaire:
Code:
1 2 3
|
1101000010111100100000100011110 (1751007518)
__101111010000110111110111000100 (-792952260) |
j'ai remarquer que les valeur en rouge était des inverses, mais c'est la seule piste que j'ai...
Ou peut être un problème avec le bit du signe ?
Donc voila, si quelqu'un à une explication, voir un bout de code (python) qui me permetrai de faire quelque chose l'équivalent ça serrait super ^^