Dans la documentation des opérateurs Javascript (chez Mozilla) je vois :
a >> b
Décalage binaire à droite
Décale la représentation binaire de b bits sur la droite en ignorant les
bits perdus.
a >>> b
Décalage binaire à droite en complétant avec des zéros
Décale la représentation binaire de b bits sur la droite en ignorant les
bits perdus et ajoute des zéros sur la gauche.
Dans le deuxième cas, c'est clair : on ajoute des zéros à gauche, donc
en gros ça divise la valeur par 2.
Mais dans le premier cas ?
Je décale tout vers la droite, et ce qu'il y aura à la place à gauche,
on verra bien ?
Concrètement, sur un exemple j'ai eu le même résultat. Mais faut-il se
méfier de risquer d'obtenir autre chose ?
Ou on aura une valeur sur Windows et une autre sur Mac ?
A propos existe-t-il la possibilité de faire tourner les bits, et de
réinjecter à gauche le bit perdu à droite ?
Je ne saurais pas citer de mémoire, mais il me semble qu'il existe des
cas d'application.
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
Guiche
Gloops Wrote in message:
Bonjour tout le monde,
Salut à toi,
Dans la documentation des opérateurs Javascript (chez Mozilla) je vois : a >> b Décalage binaire à droite Décale la représentation binaire de b bits sur la droite en ignorant les bits perdus. a >>> b Décalage binaire à droite en complétant avec des zéros Décale la représentation binaire de b bits sur la droite en ignorant les bits perdus et ajoute des zéros sur la gauche. Dans le deuxième cas, c'est clair : on ajoute des zéros à gauche, donc en gros ça divise la valeur par 2. Mais dans le premier cas ? Je décale tout vers la droite, et ce qu'il y aura à la place à gauche, on verra bien ?
En complément à deux, garder le bit de poids fort aura pour effet de garder le signe en divisant par deux ;)
Concrètement, sur un exemple j'ai eu le même résultat. Mais faut-il se méfier de risquer d'obtenir autre chose ? Ou on aura une valeur sur Windows et une autre sur Mac ?
Des mêmes nombres sur des plateformes différentes seront éventuellement stockés différemment mais le résultat de cette opération sera le même...
A propos existe-t-il la possibilité de faire tourner les bits, et de réinjecter à gauche le bit perdu à droite ?
Il existe des formules pour émuler ça.
Je ne saurais pas citer de mémoire, mais il me semble qu'il existe des cas d'application.
Pour les décalages en général ? Grapiller de l'espace avec des flags, diviser/multiplier rapidement par une puissance de 2 (et tant pis pour le reste/dépassement)... ----Android NewsGroup Reader---- http://usenet.sinaapp.com/
Gloops <gloops@zailes.invalid.org.invalid> Wrote in message:
Bonjour tout le monde,
Salut à toi,
Dans la documentation des opérateurs Javascript (chez Mozilla) je vois :
a >> b
Décalage binaire à droite
Décale la représentation binaire de b bits sur la droite en ignorant les
bits perdus.
a >>> b
Décalage binaire à droite en complétant avec des zéros
Décale la représentation binaire de b bits sur la droite en ignorant les
bits perdus et ajoute des zéros sur la gauche.
Dans le deuxième cas, c'est clair : on ajoute des zéros à gauche, donc
en gros ça divise la valeur par 2.
Mais dans le premier cas ?
Je décale tout vers la droite, et ce qu'il y aura à la place à gauche,
on verra bien ?
En complément à deux, garder le bit de poids fort aura pour effet
de garder le signe en divisant par deux ;)
Concrètement, sur un exemple j'ai eu le même résultat. Mais faut-il se
méfier de risquer d'obtenir autre chose ?
Ou on aura une valeur sur Windows et une autre sur Mac ?
Des mêmes nombres sur des plateformes différentes seront
éventuellement stockés différemment mais le résultat de cette
opération sera le même...
A propos existe-t-il la possibilité de faire tourner les bits, et de
réinjecter à gauche le bit perdu à droite ?
Il existe des formules pour émuler ça.
Je ne saurais pas citer de mémoire, mais il me semble qu'il existe des
cas d'application.
Pour les décalages en général ? Grapiller de l'espace avec des
flags, diviser/multiplier rapidement par une puissance de 2 (et
tant pis pour le reste/dépassement)...
Dans la documentation des opérateurs Javascript (chez Mozilla) je vois : a >> b Décalage binaire à droite Décale la représentation binaire de b bits sur la droite en ignorant les bits perdus. a >>> b Décalage binaire à droite en complétant avec des zéros Décale la représentation binaire de b bits sur la droite en ignorant les bits perdus et ajoute des zéros sur la gauche. Dans le deuxième cas, c'est clair : on ajoute des zéros à gauche, donc en gros ça divise la valeur par 2. Mais dans le premier cas ? Je décale tout vers la droite, et ce qu'il y aura à la place à gauche, on verra bien ?
En complément à deux, garder le bit de poids fort aura pour effet de garder le signe en divisant par deux ;)
Concrètement, sur un exemple j'ai eu le même résultat. Mais faut-il se méfier de risquer d'obtenir autre chose ? Ou on aura une valeur sur Windows et une autre sur Mac ?
Des mêmes nombres sur des plateformes différentes seront éventuellement stockés différemment mais le résultat de cette opération sera le même...
A propos existe-t-il la possibilité de faire tourner les bits, et de réinjecter à gauche le bit perdu à droite ?
Il existe des formules pour émuler ça.
Je ne saurais pas citer de mémoire, mais il me semble qu'il existe des cas d'application.
Pour les décalages en général ? Grapiller de l'espace avec des flags, diviser/multiplier rapidement par une puissance de 2 (et tant pis pour le reste/dépassement)... ----Android NewsGroup Reader---- http://usenet.sinaapp.com/
Olivier Miakinen
Bonjour, Le 09/08/2016 16:03, Gloops a écrit :
Bonjour tout le monde, Dans la documentation des opérateurs Javascript (chez Mozilla) je vois : a >> b Décalage binaire à droite Décale la représentation binaire de b bits sur la droite en ignorant les bits perdus.
Dans la doc de référence c'est : 11.7.2 The Signed Right Shift Operator ( >> ) <http://www.ecma-international.org/ecma-262/5.1/#sec-11.7.2>
a >>> b Décalage binaire à droite en complétant avec des zéros Décale la représentation binaire de b bits sur la droite en ignorant les bits perdus et ajoute des zéros sur la gauche.
Dans la doc de référence c'est : 11.7.3 The Unsigned Right Shift Operator ( >>> ) <http://www.ecma-international.org/ecma-262/5.1/#sec-11.7.3>
Dans le deuxième cas, c'est clair : on ajoute des zéros à gauche, donc en gros ça divise la valeur par 2.
Oui pour des nombres positifs (inférieurs à 2^31). D'ailleurs ça donnera le même résultat dans le premier cas : 100 >>> 1 == 100 >> 1 == 50
Mais dans le premier cas ? Je décale tout vers la droite, et ce qu'il y aura à la place à gauche, on verra bien ?
Le bit le plus à gauche d'un nombre considéré comme un entier 32 bits sera recopié, ce qui donnera donc bien une division par 2, y compris pour un nombre négatif : -100 >> 1 == -50 Ce n'est plus vrai avec >>> puisque ce premier bit devient un 0 : -100 >>> 1 == 2147483598
Concrètement, sur un exemple j'ai eu le même résultat. Mais faut-il se méfier de risquer d'obtenir autre chose ?
Oui, pour les nombres négatifs. Si tu veux faire une division par 2^n d'un nombre qui peut être négatif (entre -2^31 et 2^31-1), utilise
et pas >>>.
Ou on aura une valeur sur Windows et une autre sur Mac ?
Non, c'est normalisé.
A propos existe-t-il la possibilité de faire tourner les bits, et de réinjecter à gauche le bit perdu à droite ? Je ne saurais pas citer de mémoire, mais il me semble qu'il existe des cas d'application.
Pas en une seule opération, mais tu peux faire ceci pour faire tourner vers la droite r bits d'un nombre x sur n bits (n <= 32) : x << (n - r) + x >>> r (à masquer avec 2^n-1 si n < 32) ((non testé)) -- Olivier Miakinen
Bonjour,
Le 09/08/2016 16:03, Gloops a écrit :
Bonjour tout le monde,
Dans la documentation des opérateurs Javascript (chez Mozilla) je vois :
a >> b
Décalage binaire à droite
Décale la représentation binaire de b bits sur la droite en ignorant les
bits perdus.
Dans la doc de référence c'est :
11.7.2 The Signed Right Shift Operator ( >> )
<http://www.ecma-international.org/ecma-262/5.1/#sec-11.7.2>
a >>> b
Décalage binaire à droite en complétant avec des zéros
Décale la représentation binaire de b bits sur la droite en ignorant les
bits perdus et ajoute des zéros sur la gauche.
Dans la doc de référence c'est :
11.7.3 The Unsigned Right Shift Operator ( >>> )
<http://www.ecma-international.org/ecma-262/5.1/#sec-11.7.3>
Dans le deuxième cas, c'est clair : on ajoute des zéros à gauche, donc
en gros ça divise la valeur par 2.
Oui pour des nombres positifs (inférieurs à 2^31). D'ailleurs ça
donnera le même résultat dans le premier cas :
100 >>> 1 == 100 >> 1 == 50
Mais dans le premier cas ?
Je décale tout vers la droite, et ce qu'il y aura à la place à gauche,
on verra bien ?
Le bit le plus à gauche d'un nombre considéré comme un entier 32 bits
sera recopié, ce qui donnera donc bien une division par 2, y compris
pour un nombre négatif :
-100 >> 1 == -50
Ce n'est plus vrai avec >>> puisque ce premier bit devient un 0 :
-100 >>> 1 == 2147483598
Concrètement, sur un exemple j'ai eu le même résultat. Mais faut-il se
méfier de risquer d'obtenir autre chose ?
Oui, pour les nombres négatifs. Si tu veux faire une division par 2^n
d'un nombre qui peut être négatif (entre -2^31 et 2^31-1), utilise
et pas >>>.
Ou on aura une valeur sur Windows et une autre sur Mac ?
Non, c'est normalisé.
A propos existe-t-il la possibilité de faire tourner les bits, et de
réinjecter à gauche le bit perdu à droite ?
Je ne saurais pas citer de mémoire, mais il me semble qu'il existe des
cas d'application.
Pas en une seule opération, mais tu peux faire ceci pour faire tourner
vers la droite r bits d'un nombre x sur n bits (n <= 32) :
x << (n - r) + x >>> r
(à masquer avec 2^n-1 si n < 32)
((non testé))
Bonjour tout le monde, Dans la documentation des opérateurs Javascript (chez Mozilla) je vois : a >> b Décalage binaire à droite Décale la représentation binaire de b bits sur la droite en ignorant les bits perdus.
Dans la doc de référence c'est : 11.7.2 The Signed Right Shift Operator ( >> ) <http://www.ecma-international.org/ecma-262/5.1/#sec-11.7.2>
a >>> b Décalage binaire à droite en complétant avec des zéros Décale la représentation binaire de b bits sur la droite en ignorant les bits perdus et ajoute des zéros sur la gauche.
Dans la doc de référence c'est : 11.7.3 The Unsigned Right Shift Operator ( >>> ) <http://www.ecma-international.org/ecma-262/5.1/#sec-11.7.3>
Dans le deuxième cas, c'est clair : on ajoute des zéros à gauche, donc en gros ça divise la valeur par 2.
Oui pour des nombres positifs (inférieurs à 2^31). D'ailleurs ça donnera le même résultat dans le premier cas : 100 >>> 1 == 100 >> 1 == 50
Mais dans le premier cas ? Je décale tout vers la droite, et ce qu'il y aura à la place à gauche, on verra bien ?
Le bit le plus à gauche d'un nombre considéré comme un entier 32 bits sera recopié, ce qui donnera donc bien une division par 2, y compris pour un nombre négatif : -100 >> 1 == -50 Ce n'est plus vrai avec >>> puisque ce premier bit devient un 0 : -100 >>> 1 == 2147483598
Concrètement, sur un exemple j'ai eu le même résultat. Mais faut-il se méfier de risquer d'obtenir autre chose ?
Oui, pour les nombres négatifs. Si tu veux faire une division par 2^n d'un nombre qui peut être négatif (entre -2^31 et 2^31-1), utilise
et pas >>>.
Ou on aura une valeur sur Windows et une autre sur Mac ?
Non, c'est normalisé.
A propos existe-t-il la possibilité de faire tourner les bits, et de réinjecter à gauche le bit perdu à droite ? Je ne saurais pas citer de mémoire, mais il me semble qu'il existe des cas d'application.
Pas en une seule opération, mais tu peux faire ceci pour faire tourner vers la droite r bits d'un nombre x sur n bits (n <= 32) : x << (n - r) + x >>> r (à masquer avec 2^n-1 si n < 32) ((non testé)) -- Olivier Miakinen
Gloops
Le 22/08/2016 à 16:29, Olivier Miakinen a écrit :
Bonjour, Le 09/08/2016 16:03, Gloops a écrit :
Bonjour tout le monde, Dans la documentation des opérateurs Javascript (chez Mozilla) je vois : a >> b Décalage binaire à droite Décale la représentation binaire de b bits sur la droite en ignorant les bits perdus.
Dans la doc de référence c'est : 11.7.2 The Signed Right Shift Operator ( >> ) <http://www.ecma-international.org/ecma-262/5.1/#sec-11.7.2>
a >>> b Décalage binaire à droite en complétant avec des zéros Décale la représentation binaire de b bits sur la droite en ignorant les bits perdus et ajoute des zéros sur la gauche.
Dans la doc de référence c'est : 11.7.3 The Unsigned Right Shift Operator ( >>> ) <http://www.ecma-international.org/ecma-262/5.1/#sec-11.7.3>
Dans le deuxième cas, c'est clair : on ajoute des zéros à gauche, donc en gros ça divise la valeur par 2.
Oui pour des nombres positifs (inférieurs à 2^31). D'ailleurs ça donnera le même résultat dans le premier cas : 100 >>> 1 == 100 >> 1 == 50
Mais dans le premier cas ? Je décale tout vers la droite, et ce qu'il y aura à la place à gauche, on verra bien ?
Le bit le plus à gauche d'un nombre considéré comme un entier 32 bits sera recopié, ce qui donnera donc bien une division par 2, y compris pour un nombre négatif : -100 >> 1 == -50 Ce n'est plus vrai avec >>> puisque ce premier bit devient un 0 : -100 >>> 1 == 2147483598
Concrètement, sur un exemple j'ai eu le même résultat. Mais faut-il se méfier de risquer d'obtenir autre chose ?
Oui, pour les nombres négatifs. Si tu veux faire une division par 2^n d'un nombre qui peut être négatif (entre -2^31 et 2^31-1), utilise
et pas >>>.
Ou on aura une valeur sur Windows et une autre sur Mac ?
Non, c'est normalisé.
A propos existe-t-il la possibilité de faire tourner les bits, et de réinjecter à gauche le bit perdu à droite ? Je ne saurais pas citer de mémoire, mais il me semble qu'il existe des cas d'application.
Pas en une seule opération, mais tu peux faire ceci pour faire tourner vers la droite r bits d'un nombre x sur n bits (n <= 32) : x << (n - r) + x >>> r (à masquer avec 2^n-1 si n < 32) ((non testé))
Uh ... Ben tu sais quoi ? Je vais devoir relire ça à tête reposée.
Le 22/08/2016 à 16:29, Olivier Miakinen a écrit :
Bonjour,
Le 09/08/2016 16:03, Gloops a écrit :
Bonjour tout le monde,
Dans la documentation des opérateurs Javascript (chez Mozilla) je vois :
a >> b
Décalage binaire à droite
Décale la représentation binaire de b bits sur la droite en ignorant les
bits perdus.
Dans la doc de référence c'est :
11.7.2 The Signed Right Shift Operator ( >> )
<http://www.ecma-international.org/ecma-262/5.1/#sec-11.7.2>
a >>> b
Décalage binaire à droite en complétant avec des zéros
Décale la représentation binaire de b bits sur la droite en ignorant les
bits perdus et ajoute des zéros sur la gauche.
Dans la doc de référence c'est :
11.7.3 The Unsigned Right Shift Operator ( >>> )
<http://www.ecma-international.org/ecma-262/5.1/#sec-11.7.3>
Dans le deuxième cas, c'est clair : on ajoute des zéros à gauche, donc
en gros ça divise la valeur par 2.
Oui pour des nombres positifs (inférieurs à 2^31). D'ailleurs ça
donnera le même résultat dans le premier cas :
100 >>> 1 == 100 >> 1 == 50
Mais dans le premier cas ?
Je décale tout vers la droite, et ce qu'il y aura à la place à gauche,
on verra bien ?
Le bit le plus à gauche d'un nombre considéré comme un entier 32 bits
sera recopié, ce qui donnera donc bien une division par 2, y compris
pour un nombre négatif :
-100 >> 1 == -50
Ce n'est plus vrai avec >>> puisque ce premier bit devient un 0 :
-100 >>> 1 == 2147483598
Concrètement, sur un exemple j'ai eu le même résultat. Mais faut-il se
méfier de risquer d'obtenir autre chose ?
Oui, pour les nombres négatifs. Si tu veux faire une division par 2^n
d'un nombre qui peut être négatif (entre -2^31 et 2^31-1), utilise
et pas >>>.
Ou on aura une valeur sur Windows et une autre sur Mac ?
Non, c'est normalisé.
A propos existe-t-il la possibilité de faire tourner les bits, et de
réinjecter à gauche le bit perdu à droite ?
Je ne saurais pas citer de mémoire, mais il me semble qu'il existe des
cas d'application.
Pas en une seule opération, mais tu peux faire ceci pour faire tourner
vers la droite r bits d'un nombre x sur n bits (n <= 32) :
x << (n - r) + x >>> r
(à masquer avec 2^n-1 si n < 32)
((non testé))
Uh ... Ben tu sais quoi ? Je vais devoir relire ça à tête reposée.
Bonjour tout le monde, Dans la documentation des opérateurs Javascript (chez Mozilla) je vois : a >> b Décalage binaire à droite Décale la représentation binaire de b bits sur la droite en ignorant les bits perdus.
Dans la doc de référence c'est : 11.7.2 The Signed Right Shift Operator ( >> ) <http://www.ecma-international.org/ecma-262/5.1/#sec-11.7.2>
a >>> b Décalage binaire à droite en complétant avec des zéros Décale la représentation binaire de b bits sur la droite en ignorant les bits perdus et ajoute des zéros sur la gauche.
Dans la doc de référence c'est : 11.7.3 The Unsigned Right Shift Operator ( >>> ) <http://www.ecma-international.org/ecma-262/5.1/#sec-11.7.3>
Dans le deuxième cas, c'est clair : on ajoute des zéros à gauche, donc en gros ça divise la valeur par 2.
Oui pour des nombres positifs (inférieurs à 2^31). D'ailleurs ça donnera le même résultat dans le premier cas : 100 >>> 1 == 100 >> 1 == 50
Mais dans le premier cas ? Je décale tout vers la droite, et ce qu'il y aura à la place à gauche, on verra bien ?
Le bit le plus à gauche d'un nombre considéré comme un entier 32 bits sera recopié, ce qui donnera donc bien une division par 2, y compris pour un nombre négatif : -100 >> 1 == -50 Ce n'est plus vrai avec >>> puisque ce premier bit devient un 0 : -100 >>> 1 == 2147483598
Concrètement, sur un exemple j'ai eu le même résultat. Mais faut-il se méfier de risquer d'obtenir autre chose ?
Oui, pour les nombres négatifs. Si tu veux faire une division par 2^n d'un nombre qui peut être négatif (entre -2^31 et 2^31-1), utilise
et pas >>>.
Ou on aura une valeur sur Windows et une autre sur Mac ?
Non, c'est normalisé.
A propos existe-t-il la possibilité de faire tourner les bits, et de réinjecter à gauche le bit perdu à droite ? Je ne saurais pas citer de mémoire, mais il me semble qu'il existe des cas d'application.
Pas en une seule opération, mais tu peux faire ceci pour faire tourner vers la droite r bits d'un nombre x sur n bits (n <= 32) : x << (n - r) + x >>> r (à masquer avec 2^n-1 si n < 32) ((non testé))
Uh ... Ben tu sais quoi ? Je vais devoir relire ça à tête reposée.
Olivier Miakinen
Le 22/08/2016 20:18, Gloops a écrit :
Uh ... Ben tu sais quoi ? Je vais devoir relire ça à tête reposée.
J'ai le défaut de donner souvent des explications trop compliquées par souci d'exactitude. Plus simplement, on peut dire que : - l'opérateur >> fait un décalage vers la droite d'un entier signé en conservant le signe, et retourne un entier signé ; - l'opérateur >>> fait un décalage vers la droite d'un entier non signé, et retourne un entier non signé. Les entiers signés vont de -2147483648 à +2147483647. Les entiers non signés vont de 0 à 4294967295. -- Olivier Miakinen
Le 22/08/2016 20:18, Gloops a écrit :
Uh ... Ben tu sais quoi ? Je vais devoir relire ça à tête reposée.
J'ai le défaut de donner souvent des explications trop compliquées
par souci d'exactitude.
Plus simplement, on peut dire que :
- l'opérateur >> fait un décalage vers la droite d'un entier signé
en conservant le signe, et retourne un entier signé ;
- l'opérateur >>> fait un décalage vers la droite d'un entier non
signé, et retourne un entier non signé.
Les entiers signés vont de -2147483648 à +2147483647.
Uh ... Ben tu sais quoi ? Je vais devoir relire ça à tête reposée.
J'ai le défaut de donner souvent des explications trop compliquées par souci d'exactitude. Plus simplement, on peut dire que : - l'opérateur >> fait un décalage vers la droite d'un entier signé en conservant le signe, et retourne un entier signé ; - l'opérateur >>> fait un décalage vers la droite d'un entier non signé, et retourne un entier non signé. Les entiers signés vont de -2147483648 à +2147483647. Les entiers non signés vont de 0 à 4294967295. -- Olivier Miakinen